在网上查了查资料,照猫画虎的写了下面的代码:
procedure TForm1.FormCreate(Sender: TObject);
var conn,rec : variant;
query:ADOquery;
begin
conn := createoleobject('adodb.connection');
conn.open('Provider= SQLOLEDB.1;server=ff;database=DBzealot;uid=sa;integrated security=SSPI');
rec := createOleObject('adodb.recordSet');
rec.activeconnection:=conn;
rec.open('select *from tb_Emploee');
end;
end.但是怎么把查询出来的值显示出来?用DBGrid吗?“rec”后面点个“.”但是却没反应,提示“程序有错,不能完成调用”怎么办啊?
最好能写一小段例子,假设tb_Emploee表有2列,“编号”“姓名”。
把表里的数据显示出来,随便什么控件都行。跪求高手帮忙~
procedure TForm1.FormCreate(Sender: TObject);
var conn,rec : variant;
query:ADOquery;
begin
conn := createoleobject('adodb.connection');
conn.open('Provider= SQLOLEDB.1;server=ff;database=DBzealot;uid=sa;integrated security=SSPI');
rec := createOleObject('adodb.recordSet');
rec.activeconnection:=conn;
rec.open('select *from tb_Emploee');
end;
end.但是怎么把查询出来的值显示出来?用DBGrid吗?“rec”后面点个“.”但是却没反应,提示“程序有错,不能完成调用”怎么办啊?
最好能写一小段例子,假设tb_Emploee表有2列,“编号”“姓名”。
把表里的数据显示出来,随便什么控件都行。跪求高手帮忙~
解决方案 »
- FastReport 中richtext内容显示不全?
- 请教 Google 工具栏和网页同步登录的效果是怎么做的?
- 购买WINDDOWS ISCSI target服务器原代码
- 用delphi能不能做出一个像visio的程序(实现visio中的某些功能如画图即可)
- 请问TStringList最多能容纳多少数据?
- dll
- SQL语句在memo中写入,调出来的时候出现了语句错误。在查询分析器中是正常的
- delphi的数组怎样连续赋值?
- help me????!!!!!(delphi 高手请指教!)
- 各位高手:如何在状态条中加入按钮、进度条等多个控件!非常着急!选给50分,解决再加分!
- 采购结算是指采购验收入库并且开发票了吧,跟企业是否付款没关系吧
- 散分!!!
查询完以后query.first;
Grid1.rowcount:=query.reccount;
for i:=1 to query.reccount do
begin
Grid1.cells[0,i]:=query.fieldbyname('编号').asstring;
Grid1.cells[1,i]:=query.fieldbyname('姓名').asstring;
end;
这个我都看8遍了...问题是用conn := createoleobject('adodb.connection'); 和rec := createOleObject('adodb.recordSet'); 创建了对象后,为什么不能调用
这2个对象的属性和方法呀?先不说别的..
是么?可是你的代码中“query”是什么?在哪里声明的?跟我查询出来的记录集rec是怎么连接起来的?是这样吗:“query:=rec;”??
“rec”关联起来?
我初学delphi ,讲详细些好吗...
8遍没看懂,那就接着再看,有现成的ado组件为什么不用?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls,ComObj, DB, ADODB;type
TForm1 = class(TForm)
Button1: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADODataSet1: TADODataSet;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
conn,rec : variant;
rs:_recordSet;
connstr:string;
begin
conn := createoleobject('adodb.connection');
connstr:='Provider= SQLOLEDB.1;server=.;database=Mq_Mpa;uid=sa;integrated security=SSPI';
conn.open(connstr);
showmessage('连接数据库成功');
rec := createOleObject('adodb.recordSet');
rec.Source:='select *from admin';
rec.activeconnection:=conn;
rec.open;
rs:=ADODataSet1.Recordset;
ADODataSet1.ConnectionString:=connstr;
ADODataSet1.Active:=false;;
ADODataSet1.CommandText:=rec.Source;
ADODataSet1.Active:=true;
ADODataSet1.Open;
DataSource1.DataSet:=ADODataSet1;
DBGrid1.DataSource:=DataSource1;
end;
end.
现在变成这样了,运行以后还是不行procedure TForm1.FormCreate(Sender: TObject);
var conn,rec : variant;
query:ADOquery; //在这里卡住了(ADOquery或TADOquery都不行)
begin
conn := createoleobject('adodb.connection');
conn.open('Provider= SQLOLEDB.1;server=ff;database=DBzealot;uid=sa;integrated security=SSPI');
rec := createOleObject('adodb.recordSet');
rec.activeconnection:=conn;
rec.open('select *from tb_Emploee');
query.first;
Grid1.rowcount:=query.reccount;
for i:=1 to query.reccount do
begin
Grid1.cells[0,i]:=query.fieldbyname('姓名').asstring;//Grid1是StringGrid控件
Grid1.cells[1,i]:=query.fieldbyname('编号').asstring;
end;end;
end.高手们再帮帮我啊~
1、Connection <=> ADOConnection.ConnectionObject;
2、Recordset <=> ADODataSet.Recordset;
3、Command <=> ADOCommand.CommandObject;
4、? <=> ADOQuery,因为 ADOQuery 根本就不是原生 ADO 对象
5、ExecSQL <=> ADODataSet.Open;
6、ExecSQLA <=> ADOCommand.Execute;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODB, ComObj, ADOInt, DB, Grids, DBGrids;type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ADOQuery1: TADOQuery;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
conn, rec: variant;
begin
conn := createoleobject('adodb.connection');
conn.open('Provider= SQLOLEDB.1;server=ff;database=DBzealot;uid=sa;integrated security=SSPI');
rec := createOleObject('adodb.recordSet'); //测试环境: d7+sqlserver2000+win2003 by jjwwang // 注意!!! 这种Open方式是不能连接数据感知控件的!
{
rec.activeconnection:=conn;
rec.open('select * from tb_Emploee');
//DataSource1.DataSet := nil; 加上下面这句就ERROR !!!
}
// 下面的Open方式就可以了!!! 为什么呢? 原因很简单!
rec.open('select select * from tb_Emploee', conn, AdOpenStatic, adLockReadOnly, adCmdText); //要这么转一下.
adoquery1.Recordset := (IDispatch(TVarData(rec).VDispatch) as _RecordSet); showmessage(adoquery1.Fields[0].AsString);
end;
end.
var
i :integer;
conn : string;
query:ADOquery;
begin
conn := 'Provider= SQLOLEDB.1;server=ff;database=DBzealot;uid=sa;integrated security=SSPI';
query:=TADOQuery.Create(nil);
query.ConnectionString:=conn;
with query do
begin
Close;
SQl.Clear;
sql.Add('select *from tb_Emploee');
open;
if RecordCount = 0 then
grid1.RowCount:=2
else
grid1.RowCount:=RecordCount + 1;
grid1.ColCount:=2;
for i:=1 to RecordCount do
begin
Grid1.cells[0,i]:=query.fieldbyname('姓名').asstring;//Grid1是StringGrid控件
Grid1.cells[1,i]:=query.fieldbyname('编号').asstring;
Next;
end;
Close;
end;
query.free;
end.
谢谢你,能连接上了,不过你的方法好像不是用的原生ADO吧...
而且query:ADOquery; 这句出错了,换成TADOquery就没事
俺一定要研究他们之间的好处。
conn.open('Provider= SQLOLEDB.1;server=ff;database=DBzealot;uid=sa;integrated security=SSPI');
rec := createOleObject('adodb.recordSet');
rec.activeconnection := conn;
//一定要这么打开,rec.open('select * from tb_Emploee'); 是单向的. 不能for循环了.
rec.open('select select * from tb_Emploee', conn, AdOpenStatic, adLockReadOnly, adCmdText); rec.movefirst; for y:=0 to rec.recordcount-1 do
begin
for x:=0 to rec.Fields.Count-1 do
stringgrid1.Cells[x,y] := vartostr(rec.fields[x].value);
rec.movenext;
end;
现在这样 编译时不会报错.