数据库中有一表,有两字段,一个是name 另一个是id,我想实现这样一个功能,就是在Excel中输入表中的一个id,输完后id就会变成name,不知道我这样说各位是否明白,因为报表中输入名字太慢了,想偷懒,想用DELPHI实现,请教各位大侠
回答帮我解决问题了,献上200分!谢谢!
delphi Excel与数据库连接
答案:2 悬赏:70 手机版
解决时间 2021-02-26 02:52
- 提问者网友:富士山上尢
- 2021-02-25 13:45
最佳答案
- 五星知识达人网友:空山清雨
- 2021-02-25 13:57
用adoquery呀
给你一个例子。
//用ADO控制excel
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
sFileName, sTableName : String;
sl : TStringList;
begin
If Not OpenDialog1.Execute Then Exit;
sFileName := OpenDialog1.FileName;
ADOConnection1.Connected := False;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' + sFileName + ';Extended
Properties=Excel 8.0;Persist Security Info=True';
ADOConnection1.Connected := True;
//
sl := TStringList.Create;
ADOConnection1.GetTableNames(sl); //sl是表名列表(Excel中可能有很多个sheet)
//Excel表中可能有很多个sheet,可以循环,本程序只处理了第一个sheet(sl[0])
//for i := 0 to sl.Count-1 Do
//begin
// sTableName := sl[i];
//end;
sTableName := sl[0];
If Pos('$', sTableName)>0 Then sTableName := '[' + sTableName + ']';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'SELECt * FROM ' + sTableName + ‘where id =’+ 你自己输入的值比如说edit1.text;
ADOQuery1.Open;
sl.Free;
end;
最后再while not adoquery1.eof do进行读取
给你一个例子。
//用ADO控制excel
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
sFileName, sTableName : String;
sl : TStringList;
begin
If Not OpenDialog1.Execute Then Exit;
sFileName := OpenDialog1.FileName;
ADOConnection1.Connected := False;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' + sFileName + ';Extended
Properties=Excel 8.0;Persist Security Info=True';
ADOConnection1.Connected := True;
//
sl := TStringList.Create;
ADOConnection1.GetTableNames(sl); //sl是表名列表(Excel中可能有很多个sheet)
//Excel表中可能有很多个sheet,可以循环,本程序只处理了第一个sheet(sl[0])
//for i := 0 to sl.Count-1 Do
//begin
// sTableName := sl[i];
//end;
sTableName := sl[0];
If Pos('$', sTableName)>0 Then sTableName := '[' + sTableName + ']';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'SELECt * FROM ' + sTableName + ‘where id =’+ 你自己输入的值比如说edit1.text;
ADOQuery1.Open;
sl.Free;
end;
最后再while not adoquery1.eof do进行读取
全部回答
- 1楼网友:渡鹤影
- 2021-02-25 14:08
begin
//在此加上代码;
msexcel:=createoleobject( 'excel.application ');
msexcel.workbooks.add;
msexcel.visible:=false;
with
dataset
do
begin
//转出表头
for
i:=0
to
fieldcount-1
do
begin
msexcel.cells[1,i+1].value:=fields[i].fieldname;
end;
//转出内容
j:=2;//表头为1,内容为第二行
while
not
eof
do
begin
for
i:=0
to
fieldcount-1
do
begin
msexcel.cells[j,i+1].numberformat:= '@ ';
msexcel.cells[j,i+1].value:=fields[i].asstring;
end;
inc(j);
next;
end;
end;//end
of
dataset;
msexcel.activeworkbook.saveas(filename);
msexcel.activeworkbook.saved:=true;
msexcel.quit;
加上一个,
uses
comobj;
var
msexcel:variant;
这种方式速度有点慢,推荐你用dxdbgrid这个控件,它有一个方法,可以实现,速度快
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯