paradox,有个自增字段A0,我从临时表往其中插入数据,我只写非自增字段可以吗?正确的应如何操作? ( 积分: 200 )

  • 主题发起人 主题发起人 handsome1234
  • 开始时间 开始时间
H

handsome1234

Unregistered / Unconfirmed
GUEST, unregistred user!
paradox数据库文件,有个自增字段A0,我从临时表往其中插入数据时我只写非自增字段可以吗?
我试了3中方法:
方法一:
//DataModule2.Query1.SQL.Add:=' insert into '+ Str_Server_TableName+'A1,A2,A3,A4,A5,A6,A7,A8,A9,A10 '+' select '+' A1,A2,A3,A4,A5,A6,A7,A8,A9,A10 '+' from '+Str_Client_TableName ;

方法二:
DataModule2.Query1.SQL.Text:='INSERT INTO '+ ' C:/NEWFLGL/SERVERDB/FLRKSP.DB ' +' '+' select * from '+' C:/NEWFLGL/ClientDB/Client_FLRKSP.DB ' ;
DataModule2.Query1.Open;
方法三:
Temp_Table1.Active:=false;
Temp_Table1.Active:=true;
Temp_Table1.First;
for i:=0 to Temp_Table1.RecordCount do
begin
Str_A1:=Temp_Table1.FieldByName('A1').AsString;
Str_A2:=Temp_Table1.FieldByName('A2').AsString;
Str_A3:=Temp_Table1.FieldByName('A3').AsString;
Str_A4:=Temp_Table1.FieldByName('A4').AsString;
Str_A5:=Temp_Table1.FieldByName('A5').AsString;
Str_A6:=Temp_Table1.FieldByName('A6').AsString;
Str_A7:=Temp_Table1.FieldByName('A7').AsString;
Str_A8:=Temp_Table1.FieldByName('A8').AsString;
Str_A9:=Temp_Table1.FieldByName('A9').AsString;
Str_A10:=Temp_Table1.FieldByName('A10').AsString;
DataModule2.Query1.SQL.Clear;
DataModule2.Query1.SQL.Text:='INSERT INTO '+ Str_Server_TableName +'(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)'+' VALUES '+'('+Str_A1+','
+Str_A2+','+Str_A3+','+Str_A4+','+Str_A5+','+Str_A6+','+Str_A7+','+Str_A8+','+Str_A9+','+Str_A10+')';
DataModule2.Query1.Open;
都出错:
Invalid use of keyword Token:?,A2,A3,A4,A5,A6,A7,A8,A9,A10)

如何解决是好?
 
paradox数据库文件,有个自增字段A0,我从临时表往其中插入数据时我只写非自增字段可以吗?
我试了3中方法:
方法一:
//DataModule2.Query1.SQL.Add:=' insert into '+ Str_Server_TableName+'A1,A2,A3,A4,A5,A6,A7,A8,A9,A10 '+' select '+' A1,A2,A3,A4,A5,A6,A7,A8,A9,A10 '+' from '+Str_Client_TableName ;

方法二:
DataModule2.Query1.SQL.Text:='INSERT INTO '+ ' C:/NEWFLGL/SERVERDB/FLRKSP.DB ' +' '+' select * from '+' C:/NEWFLGL/ClientDB/Client_FLRKSP.DB ' ;
DataModule2.Query1.Open;
方法三:
Temp_Table1.Active:=false;
Temp_Table1.Active:=true;
Temp_Table1.First;
for i:=0 to Temp_Table1.RecordCount do
begin
Str_A1:=Temp_Table1.FieldByName('A1').AsString;
Str_A2:=Temp_Table1.FieldByName('A2').AsString;
Str_A3:=Temp_Table1.FieldByName('A3').AsString;
Str_A4:=Temp_Table1.FieldByName('A4').AsString;
Str_A5:=Temp_Table1.FieldByName('A5').AsString;
Str_A6:=Temp_Table1.FieldByName('A6').AsString;
Str_A7:=Temp_Table1.FieldByName('A7').AsString;
Str_A8:=Temp_Table1.FieldByName('A8').AsString;
Str_A9:=Temp_Table1.FieldByName('A9').AsString;
Str_A10:=Temp_Table1.FieldByName('A10').AsString;
DataModule2.Query1.SQL.Clear;
DataModule2.Query1.SQL.Text:='INSERT INTO '+ Str_Server_TableName +'(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)'+' VALUES '+'('+Str_A1+','
+Str_A2+','+Str_A3+','+Str_A4+','+Str_A5+','+Str_A6+','+Str_A7+','+Str_A8+','+Str_A9+','+Str_A10+')';
DataModule2.Query1.Open;
都出错:
Invalid use of keyword Token:?,A2,A3,A4,A5,A6,A7,A8,A9,A10)

如何解决是好?
 
2表是一模一样的
 
1、同一库中:
INWERT INTO TABLE_NAME (C1,C2,C3...) (SELECT C1,C2,C3... FORM ...WHERE ...)
2、不同库:
INWERT INTO TABLE_NAME (C1,C2,C3...) IN C:/NEWFLGL/SERVERDB/FLRKSP.DB (SELECT C1,C2,C3... FORM ...WHERE ...)

3、字段如是字符型的,则应:
VALUES '+'('''+Str_A1+''','''
+Str_A2+''','''+Str_A3+''','...
 
修改如下:
DataModule2.Query1.SQL.Text:='INSERT INTO '+ Str_Server_TableName +'(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)'+' VALUES '+'('''+Str_A1+''','''
+Str_A2+''','''+Str_A3+''','''+Str_A4+''','''+Str_A5+''','''+Str_A6+''','''+Str_A7+''','''+Str_A8+''','''+Str_A9+''','''+Str_A10+')';
还是报那个错误:
Invalid use of keyword Token:?,A2,A3,A4,A5,A6,A7,A8,A9,A10)
 
'''=一个'这个可以理解
但是:
为啥有的地方用的是''',''',我的Str_A1已经是String类型了。
Str_A1,Str_A2,Str_A3。。。。。。写成:
Str_A1+' , '+Str_A2+' , '+Str_A3+' , '.......就可以了,
为什么要''','''
 
你用一个变量来显视SQL的最后结果,一看就知道其中原委了,
注意最后的:
+Str_A8+''','''+Str_A9+''','''+Str_A10+')'; 应该是:
+Str_A8+''','''+Str_A9+''','''+Str_A10+''')';
 
用DataModule2.Query1.SQL.Text:=format(......);格式处理。
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4636
KeyLife富翁笔记
作者?: chenshaizi
标题?: 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法
 
修改成: DataModule2.Query1.SQL.Text:='INSERT Into '+#39+Str_Server_TableName+#39+
' (A1,A2,A3,A4,A5,A6,A7,A8,A9,A10)'+' VALUES '+'('+Str_A1+','+Str_A2+','+
Str_A3+','+Str_A4+','+Str_A5+','+Str_A6+','+Str_A7+','+Str_A8+','+Str_A9+
','+Str_A10+')';
 
还是#39解决问题
 
多人接受答案了。
 
后退
顶部