gpt4 book ai didi

sql - 如何合并不同数据库的数据?

转载 作者:行者123 更新时间:2023-12-03 14:40:06 28 4
gpt4 key购买 nike

我发现需要合并来自不同数据库的两个选择,即 paradox(在 bde 中)和 ms sql server。

目前bde(通过TQuery)仅在程序的这一部分(即dbgrid)中使用。现在我需要将一些存储在 ms sql server 数据库(我通常使用 TADOQuery)中的数据添加到同一个网格中。

虽然查询是在完全不同的表上执行的,但列的结果集的命名和类型类似(我的意思是,如果我有这些表,比如说,在 ms sql server 数据库中,我可以使用一个简单的联合)。

是否有任何方法可以在 delphi7 中联合从这些记录集中选择的记录集,以便我可以将结果用作 dbgrid 的数据源?

最佳答案

您可以使用由例如定义创建的客户端数据集。 SQL-Server 数据集的数据集并添加 Paradox 数据集的数据。在您的情况下,TFieldDefArray 可以为空。

type
TMyFieldDef = Record
Name: String;
Size: Integer;
DataType: TFieldType;
end;

TFieldDefArray = array of TMyFieldDef;


function GetClientDSForDS(ADataSet: TDataSet; AFieldDefArray: TFieldDefArray; AClientDataSet: TClientDataSet = nil; WithRecords: Boolean = true)
: TClientDataSet;
var
i: Integer;
Function NoAutoInc(ft: TFieldType): TFieldType;
begin
if ft = ftAutoInc then
Result := ftInteger
else
Result := ft;
end;

begin

if Assigned(AClientDataSet) then
Result := AClientDataSet
else
Result := TClientDataSet.Create(nil);
Result.Close;
Result.FieldDefs.Clear;

for i := 0 to ADataSet.FieldCount - 1 do
begin
Result.FieldDefs.Add(ADataSet.Fields[i].FieldName, NoAutoInc(ADataSet.Fields[i].DataType), ADataSet.Fields[i].Size);
end;

for i := 0 to High(AFieldDefArray) do
Result.FieldDefs.Add(AFieldDefArray[i].Name, AFieldDefArray[i].DataType, AFieldDefArray[i].Size);

Result.CreateDataSet;
for i := 0 to ADataSet.FieldCount - 1 do
begin
Result.FieldByName(ADataSet.Fields[i].FieldName).DisplayLabel := ADataSet.Fields[i].DisplayLabel;
Result.FieldByName(ADataSet.Fields[i].FieldName).Visible := ADataSet.Fields[i].Visible;
end;

if WithRecords then
begin
ADataSet.First;
while not ADataSet.Eof do
begin
Result.Append;
for i := 0 to ADataSet.FieldCount - 1 do
begin
Result.FieldByName(ADataSet.Fields[i].FieldName).Assign(ADataSet.Fields[i]);
end;
Result.Post;
ADataSet.Next;
end;
end;
end;

另一种尝试可能是为悖论创建链接服务器,我没有尝试...

http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/SQL_Server_2008/Q_24067488.html

关于sql - 如何合并不同数据库的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947499/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com