Here are a few tips to using JSON from Delphi (using Devart’s PgDAC libraries)
Listing Key values from a JSON field
SELECT jsonb_object_keys(data) AS key
FROM bulkdata
WHERE idimport=29
GROUP BY key;
Here are a few tips to using JSON from Delphi (using Devart’s PgDAC libraries)
SELECT jsonb_object_keys(data) AS key
FROM bulkdata
WHERE idimport=29
GROUP BY key;
Étant donné que la compilation d’un gros projet en 64 bits provoque généralement une erreur système IRBB304, il est parfois souhaitable de compiler depuis la ligne de commande. Voilà quelques astuces.
procedure TForm1.b1Click(Sender: TObject);
Var xls:TdxSpreadSheet;
sh: TdxSpreadSheetTableView;
begin
xls:=TdxSpreadSheet.Create(Self);
Try
xls.BeginUpdate;
xls.ClearAll;
sh:=TdxSpreadSheetTableView(xls.AddSheet('Bénéficiaires'));
// row,col
if Cells[1,1]=Nil then
CreateCell(1,1);
Cells[Row,Col].AsString:='test';
sh.cells[1,1].Style.Borders[bLeft].Style:=sscbsDouble;
sh.cells[1,1].Style.Borders[bRight].Color:=clred;
sh.Cells[1,1].Style.Brush.BackgroundColor:=clcxLightGray;
sh.Cells[1,1].Style.AlignHorz:=ssahCenter;
sh.Cells[1,1].Style.DataFormat.FormatCode:='dd/mm/yyyy';
sh.Cells[1,1].Style.DataFormat.FormatCode:='# ##0.00';
sh.Cells[1,1].Style.Font.Style:=[fsBold];
// Formula
CreateCell(2,1); // B3
sh.Cells[2,1].SetText('=SUM(B2:B2)',true);
xls.EndUpdate;
xls.SaveToFile('C:\Users\gosane\Desktop\text.xlsx');
Finally
xls.Free;
End;
end;
function xlscolname(i:integer):string;
var a,b:integer;
begin
if i<0 then
result:='?'
else if i<26 then
result:=chr(65+i)
else begin
a:=i div 26;
b:=i mod 26;
result:=chr(64+a)+chr(65+b);
end;
end;
interface uses DALoader,PgLoader;
Type TMyForm = Class(TForm)
// ...
private
procedure PgLoader1PutData(Sender: TDALoader);
End;
{...}
procedure TFxxx.PgLoader1PutData(Sender: TDALoader);
var i:Integer;
begin
for i:=1 to 10 do
Sender.PutColumnData('fieldname',i,Value);
end;
procedure TFxxx.Import;
Var pgl:TPgLoader;
begin
pgl:=TPgLoader.Create(Application);
Try
pgl.Connection:=DM.PgConnection1;
pgl.TableName:='MyTableName';
pgl.Options.BufferSize:=65536;
// pgl.OnProgress:=LoaderProgress;
pgl.OnPutData:=PgLoader1PutData;
pgl.CreateColumns;
// Remove primary key from PgLoader
for I := 0 to pgl.Columns.Count-1 do
if pgl.Columns[i].Name='idprimarykey' then begin
pgl.Columns.Delete(i);
break;
end;
pgl.Load;
Finally
pgl.Free;
End;
end;
procedure TFMain.FormShow(Sender: TObject);
begin
PostMessage(Button1.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(Button1.Handle,WM_LBUTTONUP,0,0);
end;
uses Contnrs;
Dans l’interface :
TSQLColumn = Class
name : string;
typ : string;
// ...autres champs...
End;
TSqlColumnList = class(TObjectList)
private
function GetItem(Index: Integer): TSQLColumn;
procedure SetItem(Index: Integer; const Value: TSQLColumn);
public
property Items[Index: Integer]: TSQLColumn read GetItem write SetItem; default;
end;
Dans l’implémentation :
{ TSqlColumnList }
function TSqlColumnList.GetItem(Index: Integer): TSQLColumn;
begin
Result:=TSqlColumn(inherited GetItem(Index));
end;
procedure TSqlColumnList.SetItem(Index: Integer; const Value: TSQLColumn);
begin
inherited setItem(index, value);
end;
Utilisation :
TMyClass = Class
FColumns : TSqlColumnList;
Constructor Create;
Destructor Destroy; reintroduce;
End;
{ TcatRequete }
constructor TcatRequete.Create;
begin
FColumns := TSqlColumnList.Create;
end;
destructor TcatRequete.Destroy;
begin
FColumns.Free;
end;
Et pour remplir la liste :
Var column : TSqlColumn;
begin
FColumns.Clear;
// Ajouter un élément
column:=TSqlColumn.Create;
FColumns.Add(Column);
With column do begin
name := 'xxx';
end;
end;
My own tips using DevExpress products