请教:如何在Delphi6中利用ADO存取SQL数据库

LoveDana 2002-08-22 02:21:30
请讲解如何实现,如果有具体例子,另有200分奉送
...全文
45 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
S.F. 2002-08-31
  • 打赏
  • 举报
回复
to lxcat()

你列的几个 AdoConnection.GetTableNames;取得表名
AdoConnection.GetProcedureNames;存储过程名
AdoConnection.GetFieldNames;取得字段列表

没有什么用!!

gettablenames 无法区分系统表和用户表

jadesun 2002-08-25
  • 打赏
  • 举报
回复
我贴一段连接的吧

procedure TForm1.Button3Click(Sender: TObject);
Var
SQL_SERVER_ADDRESS:string;
USER_ID:string;
PASSWORD:string;
begin
ComBoBox2.Items.Clear;
ComBoBox5.Items.Clear;
SQL_SERVER_ADDRESS:=ComboBox1.Text ;
USER_ID := Edit1.Text ;
PASSWORD := Edit2.Text ;
ADOConnection1.Connected := False;
ADOConnection1.ConnectionTimeout := StrToInt(Edit5.Text);
IF USER_ID = '' Then
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Data Source='+SQL_SERVER_ADDRESS+''
Else
ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Password='+PASSWORD+';Persist Security Info=True;User ID='+USER_ID+';Data Source='+SQL_SERVER_ADDRESS+'';
ADOConnection1.LoginPrompt := False;
Try
ADOConnection1.Connected := True;
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Text := 'SELECT dbid, DB_NAME(dbid) AS DB_NAME FROM sysdatabases ORDER BY dbid';
Try
ADOQuery1.Open ;
While not ADOQuery1.Eof Do
Begin
ComBoBox2.Items.Add (ADOQuery1.FieldByName('DB_NAME').AsString);
ComBoBox5.Items.Add (ADOQuery1.FieldByName('DB_NAME').AsString);
ADOQuery1.Next ;
End;
Edit6.Enabled := False;
Edit6.Color := clScrollBar;
Except
ShowMessage('你没有SA的权限登陆服务器,数据库名必须自已填写');
ComBoBox5.Enabled := False;
ComBoBox5.Color := clScrollBar;
End;
Except
on e:exception do
ShowMessage(''+e.Message+'');
End;
end;
xylyge 2002-08-25
  • 打赏
  • 举报
回复
放一个ADOConnection控件,双击就可以利用向导来连接了
Patsy 2002-08-23
  • 打赏
  • 举报
回复
是IBM的SQL数据库还是MSSQL SERVER呢,请说清楚。
erp2 2002-08-23
  • 打赏
  • 举报
回复
o
LoveDana 2002-08-23
  • 打赏
  • 举报
回复
MS SQL Server 2000
LoveDana 2002-08-23
  • 打赏
  • 举报
回复
SQL Server 2000
lxcat 2002-08-23
  • 打赏
  • 举报
回复
我写的就是呀,ADOConnection是ADO控件呀
ilang 2002-08-22
  • 打赏
  • 举报
回复
UP
LoveDana 2002-08-22
  • 打赏
  • 举报
回复
to:jadesun(玉阳)

你能给以简单的例子代码我参考参考么?我额外送100给你。
jadesun 2002-08-22
  • 打赏
  • 举报
回复
就用VCL板上的ADO嘛,简单实用。
susanjona 2002-08-22
  • 打赏
  • 举报
回复
to lxcat:这几个函数不错啊,你有吗,能发给我吗?谢谢!
lxcat 2002-08-22
  • 打赏
  • 举报
回复
AdoConnection.GetTableNames;取得表名
AdoConnection.GetProcedureNames;存储过程名
AdoConnection.GetFieldNames;取得字段列表

AdoConnection:=TADOConnection;
LoveDana 2002-08-22
  • 打赏
  • 举报
回复
to:S.F.(饭桶)

呵呵,不错,再给一个使用TADOConnection的简单地获取机器名为Server,SQL为SQLTest,表为TableDemo 的中“Age”字段大于60的例子呢?
guguda 2002-08-22
  • 打赏
  • 举报
回复
用ado
楼上的说的很清楚了。
suiyuxing 2002-08-22
  • 打赏
  • 举报
回复
有简单方便的干吗不用简单方便啊,ADO目前最方便快捷了,
Billy_Chen28 2002-08-22
  • 打赏
  • 举报
回复
可以用ADO,也可以用BDE,但ADO效率更高
S.F. 2002-08-22
  • 打赏
  • 举报
回复
存取MSSQL 的例子,相当简单;
如果不使用vcl 的ADO 控件的话,代码如下:


引用 ComObj ,和 ADODB

// 打开库,读出数据

var cnn,rs:Variant;
i:Integer;
begin
cnn := CreateOLEObject('Adodb.Connection'); //建立连接对象
cnn.Open ('DRIVER={SQL Server};uid=sa;pwd=;DATABASE=pubs;SERVER=127.0.0.1');

rs := rs.ExeCute('select * FROM authors');
if not rs.eof then
for i:=0 to rs.fields.COunte -1 do
begin
// rs.fields.items[i].name 这个是字段名
// rs.fields.items[i].value 值
end;
rs.close ; //关闭recordset
cnn.close; // close connection
// 移动记录到下一条为 rs.moveNext
end;

以上代码是我随手写的,也许有错误

推荐声明为 tadoConnection 类,用封装了的方法
以下例子是我写的一个小软件中用到的一段;
传送一个 tstringlist 过去,将要取回的内容放入;

可以取回TABLE (表),VIEW(视图),SYSTEM TABLE(系统表),PROCEDURE_NAME (存储过程名)
///////////////////////////// 取类型 /////////////
// GetTableNamesByMode(tStringList,TableType)
// TABLE
// VIEW
// SYSTEM TABLE
// PROCEDURE_NAME
//////////////////////////////////////////////////
procedure TfrmMain.GetTableNamesByMode(DbName:String;List: TStrings;
ShowTablesType: String); //取表,从类型区别
procedure GetProcedureNames(List: TStrings);
var
NameField: TField;
DataSet: TADODataSet;
ADoCn:TADOConnection;
begin
DataSet := TADODataSet.Create(nil);
AdoCn := TADOConnection.Create(nil);
with AdoCn do
begin
try
ConnectionString:=ADOConn.ConnectionString;
DefaultDatabase :=DbName;
LoginPrompt :=false;
OpenSchema(siProcedures, EmptyParam, EmptyParam, DataSet);
NameField := DataSet.FieldByName('PROCEDURE_NAME'); { do not localize }
while not DataSet.EOF do
begin
List.Add(NameField.AsString);
DataSet.Next;
end;
finally
DataSet.Free;
end;
AdoCn.Free;
end;
end;
var
TypeField,
NameField: TField;
TableType: string;
DataSet: TADODataSet;
ADoCn:TADOConnection;
begin
if ShowTablesType='PROCEDURE_NAME' then
begin
GetProcedureNames(List); //反馈存储过程
Exit;
end;

DataSet := TADODataSet.Create(nil);
AdoCn := TADOConnection.Create(nil);
with AdoCn do
begin
try
ConnectionString:=ADOConn.ConnectionString;
DefaultDatabase :=DbName;
LoginPrompt :=false;

OpenSchema(siTables, EmptyParam, EmptyParam, DataSet);
TypeField := DataSet.FieldByName('TABLE_TYPE'); { do not localize }
NameField := DataSet.FieldByName('TABLE_NAME'); { do not localize }
List.BeginUpdate;
try
List.Clear;
while not DataSet.EOF do
begin
TableType := TypeField.AsString;
If (ShowTablesType=TableType) then
List.Add(NameField.AsString);
DataSet.Next;
end;
finally
List.EndUpdate;
end;
finally
AdoCn.Free;
DataSet.Free;
end;
end;

end;
票票飞扬 2002-08-22
  • 打赏
  • 举报
回复
用ADOConnection连接数据库,用ADOQuery,ADODataSet等操作数据库,和普通Query类似。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧