如何将dbgrideh所选记录插入到临时表中(100)

  • 主题发起人 主题发起人 极品铁观音
  • 开始时间 开始时间

极品铁观音

Unregistered / Unconfirmed
GUEST, unregistred user!
我用D7+sql2000procedure TForm1.Button1Click(Sender: TObject);vari,cnt:integer;x:word;begin dbgrideh1.DataSource.DataSet.DisableControls ; with dbgrideh1.SelectedRows do if count>0 then begin if count>cnt then cnt:=cnt else cnt:=count; for x:=0 to cnt-1 do begin if indexof(items[x])>-1 then begin dbgrideh1.DataSource.DataSet.Bookmark:=items[x]; with adoquery2 do begin close; sql.Clear ; sql.Add('select ph_num into #tmp from hz_grou where 1=2');//这个地方应该如何改为所选的记录而不是全部。这里能创建临时表但记录是全部的而不是所选。 execsql; active:=true; end; end; end;DBGrideh1.DataSource.DataSet.enableControls ;dbgrideh1.DataSource.DataSet.enableControls ; end; end;//还望有经验的高手指点
 
问题补充:我用加个标志字段的方法可以实验,但总觉得很别扭,结果是得到了但问题应该还有优化的所以向高手请教。我改成这样:procedure TForm1.Button1Click(Sender: TObject);vari,cnt:integer;x:word;begin dbgrideh1.DataSource.DataSet.DisableControls ; with dbgrideh1.SelectedRows do if count>0 then begin if count>cnt then cnt:=cnt else cnt:=count; for x:=0 to cnt-1 do begin if indexof(items[x])>-1 then begin dbgrideh1.DataSource.DataSet.Bookmark:=items[x]; with adoquery2 do begin Close; sql.clear; sql.add('update hz_grou set use_ip=:use_ip where ph_num=:za'); // Parameters.ParamByName('use_ip').Value:='A'; Parameters.ParamByName('za').Value:= dbgrideh1.DataSource.DataSet.FieldByName('ph_num').AsString ; ExecSQL ; end; end; end;DBGrideh1.DataSource.DataSet.enableControls ;end;end;procedure TForm1.Button2Click(Sender: TObject);begin with adoquery2 do begin close; sql.Clear ; sql.Add('select ph_num from hz_grou where use_ip=:str'); Parameters.ParamByName('str').Value :='A'; open; active:=true; end;end;//如果没有更好的办法就只能这样了,有点伤心。
 
你用书签阿for i := 0 to DBGrid_Src.SelectedRows.Count -1 do begin DBGrid_Src.Datasource.Dataset.Bookmark:= DBGrid_Src.SelectedRows.Items; TempBookmark:= DBGrid_Src.Datasource.Dataset.GetBookmark; DBGrid_Src.Datasource.Dataset.GotoBookmark(TempBookmark); 变量1 := DBGrid_Src.DataSource.DataSet.FieldByName('FLD1').AsString; 变量2 := DBGrid_Src.DataSource.DataSet.FieldByName('FLD2').AsString; 变量3 := DBGrid_Src.DataSource.DataSet.FieldByName('FLD3').AsString; 变量N ... with adoquery2 do begin close; sql. Clear ; sql.Add('insert into #tmp(fld1,fld2,fld3...) values (变量1,变量2,变量3...)' execsql; end; end; end;
 
to 李翔鹏:插入的记录都是空白的,请帮我看下for i := 0 to DBGrideh1.SelectedRows.Count -1 do begin DBGrideh1.Datasource.Dataset.Bookmark:= DBGrideh1.SelectedRows.Items; TempBookmark:= DBGrideh1.Datasource.Dataset.GetBookmark; DBGrideh1.Datasource.Dataset.GotoBookmark(TempBookmark); //gcname:= DBGrideh1.DataSource.DataSet.FieldByName('gc_name').AsString; //wtunit:= DBGrideh1.DataSource.DataSet.FieldByName('wt_unit').AsString; with adoquery3 do begin close; sql. Clear ; sql.Add('insert into #tmp(gc_name,wt_unit,sy_num) values (:gcname,:wtunit,:sy_num)'); Parameters.ParamByName('gcname').Value :=DBGrideh1.DataSource.DataSet.FieldByName('gc_name').AsString; Parameters.ParamByName('wtunit').Value :=DBGrideh1.DataSource.DataSet.FieldByName('wt_unit').AsString; Parameters.ParamByName('sy_num').Value :='1112';//只有这个字段能插入数据 execsql; end; // adoquery3.Active :=true; end;
 
str := '002,003,004'//选择的select ph_num into #tmp from hz_grou where id in (str)这样行吗?
 
johui:不行啊。
 
呵,提供个思路1、导出grideh选择记录到xls或TXT都可以,grideh的 dgrowselect和 dgmultiselect 设置 trueSaveDBGridEhToExportFile(TDBGridEhExportAsXLS,DBGridEh1,savdia.FileName,false)false参数可以只导出选择记录 true 导出全部2、用sql导入导出 导入xls到临时表 也是一条语句insert builderinfo(B_card,B_name,B_xb,B_jg,B_xl,B_gz,B_sfzh,B_gzdw,B_bz,b_lrsj,b_oper,b_csny) insert 临时表 SELECT * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="D:/Documents and Settings/Administrator/桌面/导入标准格式.xls";Extended Properties="Excel 8.0;HDR=Yes;";Persist Security Info=False')...[安全卡培训表$]也可以利用bookmark游标循环写入数据库
 
多人接受答案了。
 
后退
顶部