我是用2个ADOCONNECTION和相关组件连接MYSQL和SQL SERVER2008,然后将数据取出再写入,之前对sql server2008不熟悉,用来数组参数,相当郁闷。。现在出现的问题是我改用变量 将读取到数据赋值给delphi中定义的变量再写入,变量赋值等等都没问题 到执行sql语句提示:变量列名无效。如hid列名无效,hid是delphi中的变量。
var i:integer;
//str:array[0..9] of string;
hid:string;
mid:string;
mdate:string;
utime:string;
lo:string;
la:string;
hei:string;
dir:string;
spe:string;
gtime:string;begin
adoquery2.Close;
adoquery2.sql.clear;
adoquery2.sql.add('select * from msgpshistory');
adoquery2.open;if not adoquery2.IsEmpty then begin
with AdoQuery2 do while not eof do begin
//for i := 0 to 9 do
//begin
hid:=adoquery2.Fields[0].AsString;
mid:=adoquery2.Fields[1].AsString;
mdate:=adoquery2.Fields[2].AsString;
utime:=adoquery2.Fields[3].AsString;
lo:=adoquery2.Fields[4].AsString;
la:=adoquery2.Fields[5].AsString;
hei:=adoquery2.Fields[6].AsString;
dir:=adoquery2.Fields[7].AsString;
spe:=adoquery2.Fields[8].AsString;
gtime:=adoquery2.Fields[9].AsString;
//end;
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('insert into MC_historyPosinfo(historyPosinfoId,Msdid,msdsdate,updatetime,lon,Lat,height,direction,speed,Gpstime) values(hid,mid,mdate,utime,lo,la,hei,dir,spe,gtime) ');
//adoquery1.sql.add('insert into MC_historyPosinfo(historyPosinfoId,Msdid,msdsdate,updatetime,lon,Lat,height,direction,speed,Gpstime) values ("+str[0]+","+str[1]+","+str[2]+","+str[3]+","+str[4]+","+str[5]+","+str[6]+","+str[7]+","+str[8]+","+str[9]+")');
adoquery1.EXECSQL;
end;
end;
end;
求大神指点下。
var i:integer;
//str:array[0..9] of string;
hid:string;
mid:string;
mdate:string;
utime:string;
lo:string;
la:string;
hei:string;
dir:string;
spe:string;
gtime:string;begin
adoquery2.Close;
adoquery2.sql.clear;
adoquery2.sql.add('select * from msgpshistory');
adoquery2.open;if not adoquery2.IsEmpty then begin
with AdoQuery2 do while not eof do begin
//for i := 0 to 9 do
//begin
hid:=adoquery2.Fields[0].AsString;
mid:=adoquery2.Fields[1].AsString;
mdate:=adoquery2.Fields[2].AsString;
utime:=adoquery2.Fields[3].AsString;
lo:=adoquery2.Fields[4].AsString;
la:=adoquery2.Fields[5].AsString;
hei:=adoquery2.Fields[6].AsString;
dir:=adoquery2.Fields[7].AsString;
spe:=adoquery2.Fields[8].AsString;
gtime:=adoquery2.Fields[9].AsString;
//end;
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('insert into MC_historyPosinfo(historyPosinfoId,Msdid,msdsdate,updatetime,lon,Lat,height,direction,speed,Gpstime) values(hid,mid,mdate,utime,lo,la,hei,dir,spe,gtime) ');
//adoquery1.sql.add('insert into MC_historyPosinfo(historyPosinfoId,Msdid,msdsdate,updatetime,lon,Lat,height,direction,speed,Gpstime) values ("+str[0]+","+str[1]+","+str[2]+","+str[3]+","+str[4]+","+str[5]+","+str[6]+","+str[7]+","+str[8]+","+str[9]+")');
adoquery1.EXECSQL;
end;
end;
end;
求大神指点下。
解决方案 »
- 服务程序中如何执行查询
- 如何改变 scrollbar 的样式 (图) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 谁有ehlib
- 急,关于string和array的转化,在线等!
- 这里登记一下大家的网站吧!
- 怎么把以*.pas和 *.dcr为后缀名delphi控件注册???????
- 人在武汉,下周去上海,今天辞职了,散分!!
- 怎样使delphi控件在应用程序中任意定位、放大、改变属性
- 紧急,一个有关类型文件的写入问题
- 急!!!如何实现数据的统计??(用query中的sum()该如何实现??)急!!!!
- 显示找不到CH375DLL.DLL,因此这个程序未能启动。
- 使用mediaplayer控件
sql.add('... values('+Quotedstr(hid)+','+Quotedstr(mid)+','+Quotedstr(mdate)+',...');或者用参数的形式:
sql.add('... values(:hid,:mid,:mdate,...');
adoquery1.Parameters.ParamByName('hid').Value:=hid;
adoquery1.Parameters.ParamByName('mid').Value:=mid;
adoquery1.Parameters.ParamByName('mdate').Value:=mdate;
...
hid:=adoquery2.Fields[0].Asstring;
mid:=adoquery2.Fields[1].AsString;
mdate:=adoquery2.Fields[2].AsString;
utime:=adoquery2.Fields[3].Asstring;
lo:=adoquery2.Fields[4].AsString;
la:=adoquery2.Fields[5].AsString;
hei:=adoquery2.Fields[6].AsString;
dir:=adoquery2.Fields[7].AsString;
spe:=adoquery2.Fields[8].AsString;
gtime:=adoquery2.Fields[9].Asstring;
end;
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('insert into dbo.MC_historyPosinfo(historyPosinfoId,Msdid,msdstate,updatetime,lon,Lat,height,direction,speed,Gpstime) values ('+hid+','+mid+','+mdate+','+utime+','+lo+','+la+','+hei+','+dir+','+spe+','+gtime+')');
Fsetting:TFormatSettings;
hid:string;
mid,mdate,lo,la,hei,dir,spe:string;
utime,gtime:Tdatetime;if not adoquery2.IsEmpty then begin
with AdoQuery2 do while not eof do begin
begin
Fsetting.ShortDateFormat:='yyyy-MM-dd';
FSetting.DateSeparator:='-';
FSetting.LongTimeFormat:='hh:mm:ss';
utime:=adoquery2.Fields[3].AsDateTime;
gtime:=adoquery2.Fields[9].AsDateTime;
end;adoquery1.sql.add('insert into dbo.MC_historyPosinfo(historyPosinfoId,Msdid,msdstate,updatetime,lon,Lat,height,direction,speed,Gpstime) values('+hid+','+mid+','+mdate+',:Cutime,'+lo+','+la+','+hei+','+dir+','+spe+',:Cgtime)');
adoquery1.Parameters.ParamByName('Cutime').value:=utime;
adoquery1.Parameters.ParamByName('Cgtime').Value:=gtime;我看网上用参数解决,但是不行,求解决。
像这个values('2012-19-10 20:50:17'),肯定就是报错的另外你的 values ('+hid+','+mid+',...
如果是字段是字符类型的话,是错的,少了引号,要像这样 values ('''+hid+''','''+mid+''',...
但若这样加引号,如果hid变量中也有引号的话,也是錯的; 所以最好使用Quotedstr()函数,像2楼的最终sql语句,变成这成
insert into t(a,b,c) values ('小三','小四','小五')如果对sql语句,引号处理没有把握的话,就先用edit/append,然后post吧
hid:=adoquery2.Fields[0].Asstring;
mid:=adoquery2.Fields[1].AsString;
mdate:=adoquery2.Fields[2].AsString;
utime:=adoquery2.Fields[3].Asstring;
lo:=adoquery2.Fields[4].AsString;
la:=adoquery2.Fields[5].AsString;
hei:=adoquery2.Fields[6].AsString;
dir:=adoquery2.Fields[7].AsString;
spe:=adoquery2.Fields[8].AsString;
gtime:=adoquery2.Fields[9].AsString;
end;
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add('insert into dbo.MC_historyPosinfo(historyPosinfoId,Msdid,msdstate,updatetime,lon,Lat,height,direction,speed,Gpstime) values ('+Quotedstr(hid)+','+Quotedstr(mid)+','+Quotedstr(mdate)+','+Quotedstr(utime)+','+Quotedstr(lo)+','+Quotedstr(la)+','+Quotedstr(hei)+','+Quotedstr(dir)+','+Quotedstr(spe)+','+Quotedstr(gtime)+')');
//adoquery1.sql.add('insert into dbo.MC_historyPosinfo(updatetime,Gpstime) values (:Cutime,:Cgtime)');
adoquery1.Parameters.ParamByName('mid').Value:=hid;
adoquery1.Parameters.ParamByName('mid').Value:=mid;
adoquery1.Parameters.ParamByName('mdate').Value:=mdate;
adoquery1.Parameters.ParamByName('utime').value:=utime;
adoquery1.Parameters.ParamByName('lo').Value:=lo;
adoquery1.Parameters.ParamByName('la').Value:=la;
adoquery1.Parameters.ParamByName('hei').Value:=hei;
adoquery1.Parameters.ParamByName('dir').Value:=dir;
adoquery1.Parameters.ParamByName('spe').Value:=spe;
adoquery1.Parameters.ParamByName('gtime').Value:=gtime;adoquery1.open;
提示Parameter ‘hid’ not found 可断电调试可以发现hid变量是有值得 为‘394602’