我建议你不要用ADO因为我觉得ADO太浪费系统资源,我建议你用BDE。你有多个数据库,就多用几个DATABASE控件!
客户端的并发处理我给你个例子,比如在一进销存系统中添加销售单,两个客户端添加销售单都就会引发错误,因为销售单的编号是唯一的,所以就要在产生销售单编号的程序上修改一呀,比如在销售单编号添加一个数字表示是那个客户端添加的!这样就可以避免了!
你再看看这篇文章http://www.csdn.net/Develop/Read_Article.asp?Id=14166
我建议你把对数据库的操作封装成类!我给你一个我写的程序,希望对你用有帮助
unit EASYTABLE;
interface
uses
SysUtils, Classes, DB, DBTables,Dialogs;
type
TEASYTABLE = class
Protected
EasyQuery:TQuery;
Public
Constructor Create();
Destructor Destroy();override;
Procedure setData(DatabaseName:string;DataSource:TDataSource);
Procedure UpdateTable(sql:string);
function Seach(select, selectinto, from,where,whereDesign,GroupBy,
Having,Orderby: string;whereDesignEnabled:Boolean ): string;
function inster(into,Fields,values:string):string;
function update(update,Fields,values,where:string):string;
function delete(from,where:string):string;
end;
implementation
{ TEASYTABLE }
constructor TEASYTABLE.Create();
begin
EasyQuery:=TQuery.Create(EasyQuery);
end;
destructor TEASYTABLE.Destroy;
begin
EasyQuery.Close;
EasyQuery.Free;
inherited;
end;
function TEASYTABLE.inster(into, Fields, values: string): string;
var
s:string;
begin
if (into <>'')then
s:='INSERT INTO '+into
else begin
s:='Into must have a value!';
Result:=s;
exit;
end;
if (Fields <>'')then
s:=s+' ('+Fields+') '
else begin
s:='Fields must have a value!';
Result:=s;
exit;
end;
if (values <>'')then
s:=s+'Values ('+values+') '
else begin
s:='values must have a value!';
Result:=s;
exit;
end;
Result:=s;
end;
procedure TEASYTABLE.UpdateTable(sql: string);
begin
EasyQuery.Close;
EasyQuery.SQL.Clear;
EasyQuery.SQL.Add(sql);
EasyQuery.Open;
end;
procedure TEASYTABLE.setData(DatabaseName: string;
DataSource: TDataSource);
begin
EasyQuery.DatabaseName:=DatabaseName;
DataSource.DataSet:=EasyQuery;
end;
function TEASYTABLE.Seach(select, selectinto, from, where, whereDesign,
GroupBy, Having, Orderby: string; whereDesignEnabled: Boolean): string;
var
s:string;
sWhere:string;
begin
s:='select '+select;
if (selectinto <>'')then begin
s:=s+' into '+ selectinto;
end;
s:=s+' from '+from;
swhere:=where;
if (whereDesign<>'') and whereDesignEnabled then
if swhere=''then
swhere:=whereDesign
else
swhere:=swhere+' and ('+whereDesign+')';
if swhere<>''then
s:=s+' where '+swhere;
if GroupBy<>''then
s:=s+' Group By '+GroupBy;
if Having<>''then
s:=s+' having '+ Having;
if Orderby<>''then
s:=s+' order by '+Orderby;
result:=s;
end;
function TEASYTABLE.delete(from, where: string): string;
var
s:string;
begin
if (from <>'')then
s:='DELETE FROM '+from
else begin
s:='FROM must have a value!';
Result:=s;
exit;
end;
if (where <>'')then
s:=s+' WHERE '+where
else begin
s:='Where must have a value!';
Result:=s;
exit;
end;
Result:=s;
end;
function TEASYTABLE.update(update, Fields, values, where: string): string;
var
s:string;
begin
if (update <>'')then
s:='UPDATE '+update+' SET '
else begin
s:='UPDATE must have a value!';
Result:=s;
exit;
end;
if (Fields <>'')and(values <>'')then
begin
while(pos(',',Fields)<>0)and (pos(',',values)<>0) do
begin
s:=s+copy(Fields,1,pos(',',Fields)-1)+'='
+copy(values,1,pos(',',values)-1)+',';
Fields:=copy(Fields,pos(',',Fields)+1,length(Fields));
values:=copy(values,pos(',',values)+1,length(values));
showmessage(Fields+' '+values);
end;
s:=s+Fields+'='+values;
end
else begin
s:='Fields and values must have a value!';
Result:=s;
exit;
end;
if (where <>'')then
s:=s+' where '+where
else begin
s:='where must have a value!';
Result:=s;
exit;
end;
Result:=s;
end;
end.