function AdoToJs(ado: TADOQuery):
string;
var
I, J: Integer;
json: string;
begin
json := ' {columns:[ ';
for I := 0 to ado.FieldCount - 1 do
begin
json := json + ' {name:" ' + ado.Fields[I].FieldName + ' ",type:" ' + DbTypeToStr(ado.Fields[I].DataType) + ' "} ';
if I < ado.FieldCount - 1 then
json := json + ' , ';
end;
json := json + ' ],rows:[ ';
for I := 0 to ado.RecordCount - 1 do
begin
json := json + ' { ';
for J := 0 to ado.FieldCount - 1 do
begin
json := json + ado.Fields[J].FieldName + ' :" ' + ado.FieldByName(ado.Fields[J].FieldName).AsString + ' " ';
if J < ado.FieldCount - 1 then
json := json + ' , ';
end;
json := json + ' } ';
if I < ado.RecordCount - 1 then
json := json + ' , ';
end;
json := json + ' ]} ';
Result := json;
end;
function AdoToXml(ado: TADOQuery): string;
begin
Result := RecordsetToXMLString(ado.Recordset);
end;
function XmlToAdo(xml: string): TADOQuery;
var
ado: TADOQuery;
begin
ado := TADOQuery.Create( nil);
ado.Recordset := RecordsetFromXMLString(xml);
Result := ado;
end;
function RecordsetToXMLString( const Recordset: ADOInt._Recordset): string;
var
RS: Variant;
Stream: TStringStream;
begin
Result := '';
if Recordset = nil then
Exit;
Stream := TStringStream.Create( '', TEncoding.UTF8);
try
RS := CreateOleObject( ' ADODB.Recordset ');
RS := Recordset;
RS.Save(TStreamAdapter.Create(Stream) as IUnknown, adPersistXML);
Stream.Position := 0;
Result := Stream.DataString;
finally
Stream.Free;
end;
end;
function RecordsetFromXMLString( const xml: string): ADOInt._Recordset;
var
RS: Variant;
Stream: TStringStream;
begin
Result := nil;
if xml = '' then
Exit;
try
Stream := TStringStream.Create(xml, TEncoding.UTF8);
Stream.Position := 0;
RS := CreateOleObject( ' ADODB.Recordset ');
RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
Result := IUnknown(RS) as ADOInt._Recordset;
finally
Stream.Free;
end;
end;
function DbTypeToStr(dbtype: TFieldType): string;
begin
Result := GetEnumName(TypeInfo(TFieldType), Ord(dbtype))
end;
function StrToDbType( const dbtype: string): TFieldType;
begin
Result := TFieldType(GetEnumValue(TypeInfo(TFieldType), dbtype));
end;
var
I, J: Integer;
json: string;
begin
json := ' {columns:[ ';
for I := 0 to ado.FieldCount - 1 do
begin
json := json + ' {name:" ' + ado.Fields[I].FieldName + ' ",type:" ' + DbTypeToStr(ado.Fields[I].DataType) + ' "} ';
if I < ado.FieldCount - 1 then
json := json + ' , ';
end;
json := json + ' ],rows:[ ';
for I := 0 to ado.RecordCount - 1 do
begin
json := json + ' { ';
for J := 0 to ado.FieldCount - 1 do
begin
json := json + ado.Fields[J].FieldName + ' :" ' + ado.FieldByName(ado.Fields[J].FieldName).AsString + ' " ';
if J < ado.FieldCount - 1 then
json := json + ' , ';
end;
json := json + ' } ';
if I < ado.RecordCount - 1 then
json := json + ' , ';
end;
json := json + ' ]} ';
Result := json;
end;
function AdoToXml(ado: TADOQuery): string;
begin
Result := RecordsetToXMLString(ado.Recordset);
end;
function XmlToAdo(xml: string): TADOQuery;
var
ado: TADOQuery;
begin
ado := TADOQuery.Create( nil);
ado.Recordset := RecordsetFromXMLString(xml);
Result := ado;
end;
function RecordsetToXMLString( const Recordset: ADOInt._Recordset): string;
var
RS: Variant;
Stream: TStringStream;
begin
Result := '';
if Recordset = nil then
Exit;
Stream := TStringStream.Create( '', TEncoding.UTF8);
try
RS := CreateOleObject( ' ADODB.Recordset ');
RS := Recordset;
RS.Save(TStreamAdapter.Create(Stream) as IUnknown, adPersistXML);
Stream.Position := 0;
Result := Stream.DataString;
finally
Stream.Free;
end;
end;
function RecordsetFromXMLString( const xml: string): ADOInt._Recordset;
var
RS: Variant;
Stream: TStringStream;
begin
Result := nil;
if xml = '' then
Exit;
try
Stream := TStringStream.Create(xml, TEncoding.UTF8);
Stream.Position := 0;
RS := CreateOleObject( ' ADODB.Recordset ');
RS.Open(TStreamAdapter.Create(Stream) as IUnknown);
Result := IUnknown(RS) as ADOInt._Recordset;
finally
Stream.Free;
end;
end;
function DbTypeToStr(dbtype: TFieldType): string;
begin
Result := GetEnumName(TypeInfo(TFieldType), Ord(dbtype))
end;
function StrToDbType( const dbtype: string): TFieldType;
begin
Result := TFieldType(GetEnumValue(TypeInfo(TFieldType), dbtype));
end;