begin
cnn.BeginTrans;
try
cmd.ActiveConnection := cnn;
cmd.CommandText := sql;
cmd.Prepared := True;
cmd.Execute;
cnn.CommitTrans;
except
cnn.RollbackTrans;
Result := False;
end;
end;
end;
三、訪問數(shù)據(jù)
1、最前 rst.MoveFirst;
2、最后 rst.MoveLast;
3、向前 rst.MovePrevious;
4、向后 rst.MoveNext;
5、取當(dāng)前記錄 rst.Fields[0].Value 或 rst.Fields[\’字段名\’].Value;
6、修改當(dāng)前記錄 rst.Update(rst.Fields[0].Name, 某值);
7、取消修改 rst.CancelUpdate;
8、刪除當(dāng)前記錄 rst.Delete(adAffectCurrent);
9、刪除所有記錄 rst.Delete(adAffectAll);
10、追加記錄
rst.AddNew;
rst.Fields[0].Value := 值1;
rst.Fields[1].Value := 值2;
rst.Update;
11、刷新 rst.Refresh;
12、記錄數(shù) rst.RecordCount
15、其它方法和屬性查 MSDN 或 ADO 的幫助;
四、一些例子
//變量聲明
var
cnn, rst, cmd: OleVariant;
//創(chuàng)建對(duì)象
procedure TForm1.FormCreate(Sender: TObject);
begin
cnn := CreateConnection;
rst := CreateRecordset;
cmd := CreateCommand;
end;
//釋放對(duì)象
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeCommand(cmd);
FreeRecordset(rst);
FreeConnection(cnn);
end;
//連接數(shù)據(jù)庫(kù)
procedure TForm1.Button1Click(Sender: TObject);
begin
if ConnectToDB(cnn, \’mydb\’, \’127.0.0.1\’, \’sa\’, \’ok\’) then
Caption := \’連接成功\’
else Caption := \’連接失敗\’;
end;
//取記錄
procedure TForm1.Button2Click(Sender: TObject);
begin
ExecSQL(cnn, rst, \’select * from 表a\’);
Caption := VarToStr(rst.Fields[\’字段a\’].Value);
end;
五、原生 ADO 與 Delphi ADOExpress 組件的對(duì)應(yīng)關(guān)系
1、Connection <=> ADOConnection.ConnectionObject;
2、Recordset <=> ADODataSet.Recordset;
3、Command <=> ADOCommand.CommandObject;
4、? <=> ADOQuery,因?yàn)?ADOQuery 根本就不是原生 ADO 對(duì)象
5、ExecSQL <=> ADODataSet.Open;
6、ExecSQLA <=> ADOCommand.Execute;
7、有了上面幾個(gè)其它的就不多說了
六、與數(shù)據(jù)庫(kù)結(jié)構(gòu)有關(guān)的一些函數(shù)
1、動(dòng)態(tài)改變字段名稱
uses ComObj;
//Access
//TableName: 表名; OldColName: 原字段名; NewColName: 新字段名;
procedure RenameField(const TableName, OldColName, NewColName: string);
var
DB, Col: OleVariant;
begin
DB := CreateOleObject(\’ADOX.Catalog\’);
DB.ActiveConnection := ADOConnection1.ConnectionObject;
Col := CreateOleObject(\’ADOX.Column\’);
Col := DB.Tables[TableName].Columns[OldColName];
Col.Name := NewColName;
end;
//SQLServer
procedure RenameField(const TableName, OldColName, NewColName: string);
begin
with ADOCommand1 do
begin
CommandText := \’EXEC sp_rename \’\’\’ + TableName + \’.\’ + OldColName +
\’\’\’,\’\’\’ + NewColName + \’\’\’,\’\’COLUMN\’\’;\’;
Excute;
end;
end;
來源:考試大-計(jì)算機(jī)二級(jí)考試