当前位置:主页>销售管理软件> 列表

ADOSQUERY增加记录 找网吧商品销售软件

财务软件版1楼: 我用ADOQUERY在ACCESS表中加入记录,语句如下:
Form1.ADOQuery1.close;
Form1.ADOQuery1.SQL.Clear;
sql_text:='''';
for i:=0 to 100 do
for j:=0 to 5 do
for k:=0 to 23 do
begin
single_stats:=ho_in_stat_index[i,j,k,0];
if single_stats<>'''' then
ho_in_stat_to_mdb(single_stats,ho_in_stat_index[i,j,k,1],i,j,k);
end;
Form1.ADOQuery1.sql.text:=sql_text;
Form1.ADOQuery1.ExecSQL;
ho_in_stat_to_mdb函数如下:
procedure ho_in_stat_to_mdb(stat30,stat31:string;btsm,btsn,hour:integer);
var
stat_list,stat_result0,stat_result1:TStringList;
i,j,nei_cout,lac,ci:integer;
begin
stat_list:=TStringList.create;
stat_result0:=TStringList.create;
stat_result1:=TStringList.create;
sBreakApart(stat30,Char(#9),stat_list);
nei_cout:=strtoint(stat_list[1]);
sBreakApart(stat_list[nei_cout*2+4],'' '',stat_result0);
stat_list.Free;
stat_list:=TStringList.create;
sBreakApart(stat31,Char(#9),stat_list);
sBreakApart(stat_list[nei_cout*2+4],'' '',stat_result1);
lac:=cbts[btsm,btsn].lac;
ci:=cbts[btsm,btsn].ci;
for i:=0 to nei_cout-1 do
begin
{ with ADOQuery_temp do
begin
Append;
Fields[0].AsString :=bscid;
Fields[1].Asinteger :=btsm;
Fields[2].Asinteger :=btsn;
Fields[3].Asinteger :=lac;
Fields[4].Asinteger :=ci;
Fields[5].Asinteger :=0;
Fields[6].Asinteger :=hour;
Fields[7].Asinteger :=0;
Fields[8].Asinteger :=strtoint(stat_list[3+i*2]);
Fields[9].Asinteger :=strtoint(leftstr(stat_list[4+i*2],1));
for j:=1 to 44 do
Fields[j+9].Asinteger :=strtoint(stat_result0[i*44+j-1]);
for j:=1 to 44 do
Fields[j+53].Asinteger :=strtoint(stat_result1[i*44+j-1]);
end; }
sql_text:=sql_text +''insert into BTSI '' + ''values('' + '''''''' +bscid + ''''''''+'','' + '''''''' + inttostr(btsm) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(btsn) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(lac) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(ci) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + ''0'' + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(hour) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + ''0'' + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + stat_list[3+i*2] + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + leftstr(stat_list[4+i*2],1) + '''''''' ;
for j:=1 to 44 do
sql_text:=sql_text+ '','' + '''''''' + stat_result0[i*44+j-1] + '''''''' ;
for j:=1 to 44 do
sql_text:=sql_text+ '','' + '''''''' + stat_result1[i*44+j-1] + '''''''' ;
sql_text:=sql_text + '');'' ;
end;
stat_result0.Free;
stat_result1.Free;
end;
执行后出错,提示“在SQL语句结尾后找到字符。,“不知道是何意思?
另外如果我将sql_text:=sql_text + '');'' 中的分号去掉会提示缺少分号,但我看其它人的例子里没有分号呀?
希望高手能够执教!
还有为何在DELPHI中使用AD0就是比较慢,有人告诉我这是DELPHI的接口问题,是无法解决的,真的是这样吗?

2楼: 把sql_text的内容贴到其它文本编辑器中看一下,就知道问题在哪里了,或许错误还不止一处. 如免费客户管理软件

3楼: DELPHI中的转义,三个引号等于一个单引号。
你可以用一个函数
function makestr(pstr:string):string;
begin
result := ''''''+pstr+'''''';
end;
只要用到字符的地方,用这个函数就可以啦。

4楼: Form1.ADOQuery1.sql.text:=sql_text;
showmessage(sql_text);
//或 memo1.lines.add(sqll_text);
Form1.ADOQuery1.ExecSQL;


检查语法是否有问题

5楼: 谢谢上面的弟兄。我还想知道为何在DELPHI用ADO总是比较慢,是我设置错误吗?以前好像也有很多弟兄遇到这样的问题。如果确实无法解决,我只有用BDE了,或者干脆有人建议我用VB编写了。

6楼: 我用ADOQUERY在ACCESS表中加入记录,语句如下:


Form1.ADOQuery1.close;
Form1.ADOQuery1.SQL.Clear;
sql_text:='''';
for i:=0 to 100 do
for j:=0 to 5 do
for k:=0 to 23 do
begin
single_stats:=ho_in_stat_index[i,j,k,0];
if single_stats<>'''' then
ho_in_stat_to_mdb(single_stats,ho_in_stat_index[i,j,k,1],i,j,k);
end;
Form1.ADOQuery1.sql.text:=sql_text;
Form1.ADOQuery1.ExecSQL;
ho_in_stat_to_mdb函数如下:
procedure ho_in_stat_to_mdb(stat30,stat31:string;btsm,btsn,hour:integer);
var
stat_list,stat_result0,stat_result1:TStringList;
i,j,nei_cout,lac,ci:integer;
begin
stat_list:=TStringList.create;
stat_result0:=TStringList.create;
stat_result1:=TStringList.create;
sBreakApart(stat30,Char(#9),stat_list);
nei_cout:=strtoint(stat_list[1]);
sBreakApart(stat_list[nei_cout*2+4],'' '',stat_result0);
stat_list.Free;
stat_list:=TStringList.create;
sBreakApart(stat31,Char(#9),stat_list);


sBreakApart(stat_list[nei_cout*2+4],'' '',stat_result1);
lac:=cbts[btsm,btsn].lac;
ci:=cbts[btsm,btsn].ci;
for i:=0 to nei_cout-1 do
begin
sql_text:=sql_text +''insert into BTSI '' + ''values('' + '''''''' +bscid + ''''''''+'','' + '''''''' + inttostr(btsm) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(btsn) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(lac) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(ci) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + ''0'' + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + inttostr(hour) + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + ''0'' + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + stat_list[3+i*2] + '''''''' ;
sql_text:=sql_text+ '','' + '''''''' + leftstr(stat_list[4+i*2],1) + '''''''' ;
for j:=1 to 44 do
sql_text:=sql_text+ '','' + '''''''' + stat_result0[i*44+j-1] + '''''''' ;
for j:=1 to 44 do
sql_text:=sql_text+ '','' + '''''''' + stat_result1[i*44+j-1] + '''''''' ;
sql_text:=sql_text + '');'' ;
end;
stat_result0.Free;
stat_result1.Free;
end;
对不起上面的程序中间一段注释忘了删除,现在删除了再贴一遍,我按照3楼上面说的输出到了memo中,发现可以加入一条记录,加入第二条就出错了。发现当时memo中是如下
insert into BTSI values(''bsc02'',''1'',''0'',''39216'',''50041'',''0'',''11'',''0'',''1'',''1'',''1'',''5'',''7'',''1'',''0'',''68'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''4'',''5'',''7'',''1'',''0'',''68'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0''); insert into BTSI values(''bsc02'',''1'',''0'',''39216'',''50041'',''0'',''11'',''0'',''1'',''2'',''0'',''0'',''0'',''0'',''0'',''4'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''4'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'',''0'');


看不出来哪里出错了!

财务软件版7楼: 我没用过ACCESS,但是我知道在MS-SQL中,一条指令的末尾是不加分号的,你这里每句都有分号。是不是这里的问题呀?

8楼: dancekids:
我按照你的方法加了一个函数,但result := ''''''+pstr+'''''';这句话在DELPHI里面直接认为是''pstr''字符串而不是引号+变量+引号。

9楼: LWH006,不行呀,如果不加分号会提示需要分号。所以还是需要的。

10楼: 也许前面写得比较复杂,我现在将问题简化:
sql_text:=''insert into BTSI values('' + '''''''' + ''bsc02''+ '''''''' + '',1,0,39216,50041,0,11,0,1,1,1,5,7,1,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,7,1,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); insert into BTSI values('' + '''''''' + ''bsc02'' + '''''''' + '',1,0,39216,50041,0,11,0,1,2,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'' + #13#10;
Form1.ADOQuery1.sql.text:=sql_text;
Form1.ADOQuery1.ExecSQL;
这样写,还是无法执行,不知道错误在哪里呢?

11楼: 建议你通过给表的部分字段赋值,来检查错误在哪里。

12楼: 我遇到的问题是这样的:
sql_text:=''insert into BTSI values('' + '''''''' + ''bsc02''+ '''''''' + '',1,0,39216,50041,0,11,0,1,1,1,5,7,1,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,7,1,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
Form1.ADOQuery1.sql.text:=sql_text;
Form1.ADOQuery1.ExecSQL;
这样是可以执行的.
但写为如下就无法执行:
sql_text:=''insert into BTSI values('' + '''''''' + ''bsc02''+ '''''''' + '',1,0,39216,50041,0,11,0,1,1,1,5,7,1,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,5,7,1,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); insert into BTSI values('' + '''''''' + ''bsc02'' + '''''''' + '',1,0,39216,50041,0,11,0,1,2,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'' + #13#10;

也就是SQL语句是否可以同时写入多条插入语句呀? 如网吧商品销售软件