开始加一行:
adoquery3.Parameters.Clear;
否则第一次是给第一到四个参数赋值(正确),第二次是给第五到八个参数赋值(错误),第三次...
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
adoquery3.Parameters.Clear;
否则第一次是给第一到四个参数赋值(正确),第二次是给第五到八个参数赋值(错误),第三次...
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
我觉得这样写更好:
procedure InitQuery//这个函数调用一次
begin
adoquery3.Active := false;
adoquery3.SQL.Clear;
adoquery3.SQL.Add(' INSERT INTO kaoDianTale'+
' (考点所在章序号,考点所在节序号,考点内容,考点级别)'
+' values(:考点所在章序号,:考点所在节序号,:考点内容,:考点级别)');
adoquery3.Parameters.Clear;0D
adoquery3.Parameters.ParseSQL(adoquery3.SQL.Text,True);
try//可能会有些DBMS不支持Prepare
adoquery3.Prepared := True;
except
end;
end;procedure ExecQuery//这个函数重复调用
begin adoquery3.Parameters.ParamByName('考点所在章序号').Value := 3;
adoquery3.Parameters.ParamByName('考点所在节序号').Value := 5;
adoquery3.Parameters.ParamByName('考点内容').Value := '美丽的小山村';
adoquery3.Parameters.ParamByName('考点级别').Value := 4;
adoquery3.ExecSQL ;
end;
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
but i think the better way is:
adoquery3.close;
adoquery3.sql.clear;
adoquery3.sql.add('INSERT INTO kaoDianTale 考点所在章序号,考点所在节序号,考点内容,考点级别 values(:考点所在章序号,:考点所在节序号,:考点内容,:考点级别)');
adoquery3.parameters.parambyname('考点所在章序号').value:=3;
adoquery3.parameters.parambyname('考点所在节序号').value:=5;
adoquery3.parameters.parambyname('考点内容').value:='美丽的小山村';
adoquery3.parameters.parambyname('考点级别').value:=4;
adoquery3.execsql;
用 CreateParameter 方法就行了。
每次调用前先把参数清除,然后创建。
用我的方法,如果用的是支持SQL预编译的DBMS,当循环次数很多时,能够提高很多运行效率。 ____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
AdoQuery1.close
AdoQuery1.sql.clear
AdoQuery1.Sql.add
AdoQuery1.Prepared
AdoQuery1.ExecSql
____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/