Search found 451 matches

by swierzbicki
Thu 10 Sep 2015 08:23
Forum: Universal Data Access Components
Topic: [6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.
Replies: 18
Views: 6171

Re: [6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.

Hi Mickael,

Thank you for your kind help.
I've just checked my project and I don't have any AnsiString nor AnsiChar variables / properties / fields. Everything is stored in String or Char variables.

Unicode "0xe9" "0x7" "0x75" chars correspond to "é" "q" "u" chars. Looks like "équ" string is somehow sent to the server... Problem is that I do not send a string starting, ending or having these chars !

When you look at DBMonitor :

SQL

Code: Select all

INSERT INTO Productions_Plateaux_Details
(Ordre_Fabrication,Ligne,date_poste,Plateau,Date_Entree_Plateau,Date_Sortie_Plateau,Compteur_Plateau,Compteur_Produit,Id_Poste,Id_Pilote_1,Id_Pilote_2)
SELECT
Ordre_Fabrication,Ligne,:date_poste,Plateau,Date_Entree_Plateau,:Date_Sortie_Plateau,Compteur_Plateau,Compteur_Produit,:Id_Poste,:Id_Pilote_1,:Id_Pilote_2
FROM  Productions_Plateaux  Where Ligne = :Ligne;
Parameters passed

Code: Select all

date_poste                    date                       09/09/2015
Date_Sortie_Plateau    datetime                 09/09/2015 17:45:58
Id_Poste                       integer                    2
Id_Pilote_1                   widestring[2]           '26'
Id_Pilote_2                   widestring[2]           '52'
Ligne                            widestring[8]           'PIC PIC 3'
Error

Code: Select all

invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75
You can see that these characters aren't used !
More, this is well working on 4 other workstations !
by swierzbicki
Wed 09 Sep 2015 15:43
Forum: Universal Data Access Components
Topic: [6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.
Replies: 18
Views: 6171

Re: [6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.

I really need devart help on this !

Method Archiver_Plateau is raising "invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75." (while Sauver_PlateauEnCours is always working).

Software is running on 6 Windows 7 SP1 workstation. All these workstation are running 32bit PostgreSQL 9.4.4 server. Software is failling on two workstation only (one running a x68 os, the other an x64 os)

Here is th DML for table public.productions_plateaux (working) and public.productions_plateaux_details (exception)

Code: Select all

CREATE TABLE public.productions_plateaux_details (
  id_production_plateau_detail SERIAL,
  ordre_fabrication VARCHAR(6) DEFAULT ''::character varying,
  ligne VARCHAR(10) DEFAULT ''::character varying,
  date_poste DATE,
  plateau VARCHAR(50) DEFAULT ''::character varying,
  date_entree_plateau TIMESTAMP WITHOUT TIME ZONE,
  date_sortie_plateau TIMESTAMP WITHOUT TIME ZONE,
  compteur_plateau INTEGER DEFAULT 0,
  compteur_produit INTEGER DEFAULT 0,
  id_poste INTEGER,
  id_pilote_1 VARCHAR(10) DEFAULT ''::character varying,
  id_pilote_2 VARCHAR(10) DEFAULT ''::character varying,
  CONSTRAINT productions_plateaux_details_pkey PRIMARY KEY(id_production_plateau_detail)
) 
WITH (oids = false);

CREATE INDEX productions_plateaux_details_date_sortie_plateau ON public.productions_plateaux_details
  USING btree (date_sortie_plateau);

CREATE INDEX productions_plateaux_details_ligne ON public.productions_plateaux_details
  USING btree (ligne COLLATE pg_catalog."default");

CREATE INDEX productions_plateaux_details_ordre_fabrication ON public.productions_plateaux_details
  USING btree (ordre_fabrication COLLATE pg_catalog."default");

CREATE INDEX productions_plateaux_details_poste_pilote ON public.productions_plateaux_details
  USING btree (id_poste, id_pilote_1 COLLATE pg_catalog."default", id_pilote_2 COLLATE pg_catalog."default");

CREATE TABLE public.productions_plateaux (
  ordre_fabrication VARCHAR(6) DEFAULT ''::character varying NOT NULL,
  ligne VARCHAR(10) DEFAULT ''::character varying NOT NULL,
  date_poste DATE,
  plateau VARCHAR(50) DEFAULT ''::character varying NOT NULL,
  date_entree_plateau TIMESTAMP WITHOUT TIME ZONE,
  compteur_plateau INTEGER DEFAULT 0,
  compteur_produit INTEGER DEFAULT 0,
  id_poste INTEGER,
  id_pilote_1 VARCHAR(10) DEFAULT ''::character varying,
  id_pilote_2 VARCHAR(10) DEFAULT ''::character varying,
  CONSTRAINT productions_plateaux_pkey PRIMARY KEY(ordre_fabrication, ligne)
) 
WITH (oids = false);

CREATE INDEX productions_plateaux_ligne ON public.productions_plateaux
  USING btree (ligne COLLATE pg_catalog."default");

CREATE INDEX productions_plateaux_plateau ON public.productions_plateaux
  USING btree (plateau COLLATE pg_catalog."default");
Here is code compiled with Delphi XE8 Update 1

Code: Select all

Const 
 Plateau_En_Cours =
    'SELECT Ordre_Fabrication,Ligne,Plateau,Ligne,date_poste,Date_Entree_Plateau,Compteur_Plateau,Compteur_Produit FROM Productions_Plateaux WHERE Ligne = :Ligne LIMIT 1;';
  Plateau_Insert =
    'INSERT {if SQLITE} OR IGNORE {endif} INTO Productions_Plateaux (Ordre_Fabrication,Ligne,date_poste,Date_Entree_Plateau,Plateau,Compteur_Plateau,Compteur_Produit,Id_Poste,Id_Pilote_1,Id_Pilote_2) '
    + ' VALUES (:Ordre_Fabrication,:Ligne,:date_poste,:Date_Entree_Plateau,:Plateau,:Compteur_Plateau,:Compteur_Produit,:Id_Poste,:Id_Pilote_1,:Id_Pilote_2);';
  Plateau_Update =
    'Update Productions_Plateaux set Ordre_Fabrication=:Ordre_Fabrication,' +
    'date_poste=:date_poste,Plateau=:Plateau,Compteur_Plateau=:Compteur_Plateau,Compteur_Produit=:Compteur_Produit,Id_Poste=:Id_Poste,Id_Pilote_1=:Id_Pilote_1,Id_Pilote_2=:Id_Pilote_2 where Ligne=:Ligne;';
  Plateau_Archive = 'INSERT INTO Productions_Plateaux_Details' + #13#10 +
    '    (Ordre_Fabrication,Ligne,date_poste,Plateau,Date_Entree_Plateau,Date_Sortie_Plateau,Compteur_Plateau,Compteur_Produit,Id_Poste,Id_Pilote_1,Id_Pilote_2)'
    + #13#10 + 'SELECT' + #13#10 +
    '    Ordre_Fabrication,Ligne,:date_poste,Plateau,Date_Entree_Plateau,:Date_Sortie_Plateau,Compteur_Plateau,Compteur_Produit,:Id_Poste,:Id_Pilote_1,:Id_Pilote_2'
    + #13#10 + 'FROM' + #13#10 + 'Productions_Plateaux' + #13#10 +
    'Where Ligne = :Ligne;';
  Plateau_Delete = 'DELETE' + #13#10 + 'FROM' + #13#10 + 'Productions_Plateaux'
    + #13#10 + 'Where Ligne = :Ligne ;';

...

constructor TMultiCN.Create(aOwner: TComponent);
var
begin
  inherited;
  //....
  FInternalConnection := Tuniconnection.Create(nil);
end;

destructor TMultiCN.Destroy;
var
  i: Integer;
begin
  inherited;
  FInternalConnection.Free;
end;

//Before running our thread, we set DB connection
procedure TMultiCN.SetConnection(const Value: Tuniconnection);
begin
  if Value.ProviderName = 'SQLite' then
  Begin
    //We keep the same connection object or we will get "Database is locked errors"
    FConnection := Value;
  End
  else
  Begin
    //Using our Connection created into our thread instead...
    FConnection := FInternalConnection;
    FConnection.Disconnect;
    //Setting Connection properties
    FConnection.ProviderName := Value.ProviderName;
    FConnection.Server := Value.Server;
    FConnection.Port := Value.Port;
    FConnection.Username := Value.Username;
    FConnection.Password := Value.Password;
    FConnection.LoginPrompt := Value.LoginPrompt;
    FConnection.Database := Value.Database;
  End;
  FConnection.SpecificOptions.Values['SQLite.BusyTimeout=5000'];
  FConnection.SpecificOptions.Values['SQLite.EnableSharedCache=True'];
  FConnection.SpecificOptions.Values['SQLite.UseUnicode=True'];
  FConnection.SpecificOptions.Values['SQLite.Direct=True'];
  FConnection.SpecificOptions.Values['SQLite.ReadUncommitted=True'];

  FConnection.SpecificOptions.Values['PostgreSQL.ConnectionTimeout=5'];
  FConnection.SpecificOptions.Values['PostgreSQL.UseUnicode=True'];
  FConnection.SpecificOptions.Values['PostgreSQL.Charset=WIN1252'];
end;
procedure TMultiCN.Archiver_Plateau(Delete: Boolean);
var
  FUniQuery: TuniQuery;
begin
  FUniQuery := TuniQuery.Create(nil);
  FUniQuery.Connection := FConnection;

  try
    FUniQuery.SpecificOptions.Values['PostgreSQL.UseParamTypes'] := 'True';
    FUniQuery.SQL.Text := Plateau_Archive;

    FUniQuery.ParamByName('Ligne').DataType := ftString;
    FUniQuery.ParamByName('Date_Sortie_Plateau').DataType := ftDateTime;
    FUniQuery.ParamByName('Id_Poste').DataType := ftinteger;
    FUniQuery.ParamByName('Date_Poste').DataType := ftDate;
    FUniQuery.ParamByName('Id_Pilote_1').DataType := ftString;
    FUniQuery.ParamByName('Id_Pilote_2').DataType := ftString;

    FUniQuery.ParamByName('Ligne').AsString := FLigne.Id_ligne;
    FUniQuery.ParamByName('Date_Sortie_Plateau').AsDateTime :=
      FPlateau.Date_Sortie_Plateau;
    FUniQuery.ParamByName('Id_Poste').AsInteger := FPoste.Id_Poste;
    FUniQuery.ParamByName('Date_Poste').AsDate := FPoste.Date_Poste;
    FUniQuery.ParamByName('Id_Pilote_1').AsString := FPoste.Id_Pilote_1;
    FUniQuery.ParamByName('Id_Pilote_2').AsString := FPoste.Id_Pilote_2;

    if not FConnection.InTransaction then
      FConnection.StartTransaction;
    try
      FUniQuery.Prepare;
      // Do some actions with database. For example:
      FUniQuery.Execute;
      // Commit the current transaction to reflect changes in database if no errors were raised
      FConnection.Commit;
    except
      // Rollback all changes in database made after StartTransaction if an error was raised
      FConnection.Rollback;
      HandleException;
    end;

    if Delete then
    begin
      FUniQuery.SQL.Text := Plateau_Delete;
      FUniQuery.ParamByName('Ligne').DataType := ftString;
      FUniQuery.ParamByName('Ligne').AsString := FLigne.Id_ligne;

      if not FConnection.InTransaction then
        FConnection.StartTransaction;
      try
        FUniQuery.Prepare;
        // Do some actions with database. For example:
        FUniQuery.Execute;
        // Commit the current transaction to reflect changes in database if no errors were raised
        FConnection.Commit;
      except
        // Rollback all changes in database made after StartTransaction if an error was raised
        FConnection.Rollback;
        HandleException;
      end;
    end;

  finally
    FUniQuery.Free;
  end;
  Archiver_Plateau_CSV;
end;

procedure TMultiCN.Sauver_PlateauEnCours(const Value: TPlateau);
var
  FUniQuery: TuniQuery;
begin
  FUniQuery := TuniQuery.Create(nil);
  FUniQuery.Connection := FConnection;
  try
    FUniQuery.SpecificOptions.Values['PostgreSQL.UseParamTypes'] := 'True';
    FUniQuery.SQL.Text := Plateau_Update;

    FUniQuery.ParamByName('Ligne').DataType := ftString;
    FUniQuery.ParamByName('Ordre_Fabrication').DataType := ftString;
    FUniQuery.ParamByName('Compteur_Produit').DataType := ftinteger;
    FUniQuery.ParamByName('Plateau').DataType := ftString;
    FUniQuery.ParamByName('Id_Poste').DataType := ftinteger;
    FUniQuery.ParamByName('Date_Poste').DataType := ftDate;
    FUniQuery.ParamByName('Id_Pilote_1').DataType := ftString;
    FUniQuery.ParamByName('Id_Pilote_2').DataType := ftString;
    FUniQuery.ParamByName('Compteur_Plateau').DataType := ftinteger;

    FUniQuery.ParamByName('Ligne').AsString := FLigne.Id_ligne;
    FUniQuery.ParamByName('Ordre_Fabrication').AsString :=
      FOrdre_Fabrication_En_Cours.Ordre_Fabrication;
    FUniQuery.ParamByName('Compteur_Produit').AsInteger :=
      FOrdre_Fabrication_En_Cours.Compteur_Produit;
    FUniQuery.ParamByName('Plateau').AsString := Value.Nom_Plateau;

    FUniQuery.ParamByName('Id_Poste').AsInteger := FPoste.Id_Poste;
    FUniQuery.ParamByName('Date_Poste').AsDate := FPoste.Date_Poste;
    FUniQuery.ParamByName('Id_Pilote_1').AsString := FPoste.Id_Pilote_1;
    FUniQuery.ParamByName('Id_Pilote_2').AsString := FPoste.Id_Pilote_2;

    FUniQuery.ParamByName('Compteur_Plateau').AsInteger :=
      Value.Compteur_Plateau;

    if not FConnection.InTransaction then
      FConnection.StartTransaction;
    try
      FUniQuery.Prepare;
      // Do some actions with database. For example:
      FUniQuery.Execute;
      // Commit the current transaction to reflect changes in database if no errors were raised
      FConnection.Commit;
    except
      // Rollback all changes in database made after StartTransaction if an error was raised
      FConnection.Rollback;
      HandleException;
    end;

    if FUniQuery.RowsAffected = 0 then
    begin
      FUniQuery.SQL.Text := Plateau_Insert;
      FUniQuery.ParamByName('Date_Entree_Plateau').DataType := ftDateTime;
      FUniQuery.ParamByName('Ligne').DataType := ftString;
      FUniQuery.ParamByName('Ordre_Fabrication').DataType := ftString;
      FUniQuery.ParamByName('Compteur_Produit').DataType := ftinteger;
      FUniQuery.ParamByName('Plateau').DataType := ftString;
      FUniQuery.ParamByName('Id_Poste').DataType := ftinteger;
      FUniQuery.ParamByName('Date_Poste').DataType := ftDate;
      FUniQuery.ParamByName('Id_Pilote_1').DataType := ftString;
      FUniQuery.ParamByName('Id_Pilote_2').DataType := ftString;
      FUniQuery.ParamByName('Compteur_Plateau').DataType := ftinteger;

      FUniQuery.ParamByName('Date_Entree_Plateau').AsDateTime :=
        Value.Date_Entree_Plateau;
      FUniQuery.ParamByName('Ligne').AsString := FLigne.Id_ligne;
      FUniQuery.ParamByName('Ordre_Fabrication').AsString :=
        FOrdre_Fabrication_En_Cours.Ordre_Fabrication;
      FUniQuery.ParamByName('Compteur_Produit').AsInteger :=
        FOrdre_Fabrication_En_Cours.Compteur_Produit;
      FUniQuery.ParamByName('Plateau').AsString := Value.Nom_Plateau;

      FUniQuery.ParamByName('Id_Poste').AsInteger := FPoste.Id_Poste;
      FUniQuery.ParamByName('Date_Poste').AsDate := FPoste.Date_Poste;
      FUniQuery.ParamByName('Id_Pilote_1').AsString := FPoste.Id_Pilote_1;
      FUniQuery.ParamByName('Id_Pilote_2').AsString := FPoste.Id_Pilote_2;

      FUniQuery.ParamByName('Compteur_Plateau').AsInteger :=
        Value.Compteur_Plateau;

      if not FConnection.InTransaction then
        FConnection.StartTransaction;
      try
        FUniQuery.Prepare;
        // Do some actions with database. For example:
        FUniQuery.Execute;
        // Commit the current transaction to reflect changes in database if no errors were raised
        FConnection.Commit;
      except
        // Rollback all changes in database made after StartTransaction if an error was raised
        FConnection.Rollback;
        HandleException;
      end;
    end;

  finally
    FUniQuery.Free;
  end;
end;
Here is DBMonitor output :

Code: Select all

SQL Tab
INSERT INTO Productions_Plateaux_Details
    (Ordre_Fabrication,Ligne,date_poste,Plateau,Date_Entree_Plateau,Date_Sortie_Plateau,Compteur_Plateau,Compteur_Produit,Id_Poste,Id_Pilote_1,Id_Pilote_2)
SELECT
    Ordre_Fabrication,Ligne,:date_poste,Plateau,Date_Entree_Plateau,:Date_Sortie_Plateau,Compteur_Plateau,Compteur_Produit,:Id_Poste,:Id_Pilote_1,:Id_Pilote_2
FROM
Productions_Plateaux
Where Ligne = :Ligne;

Parameter Tab
date_poste                    date                       09/09/2015
Date_Sortie_Plateau    datetime                 09/09/2015 17:45:58
Id_Poste                       integer                    2
Id_Pilote_1                   widestring[2]           '26'
Id_Pilote_2                   widestring[2]           '52'
Ligne                            widestring[8]           'PIC PIC 3'



Error Tab
invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75
by swierzbicki
Tue 08 Sep 2015 19:06
Forum: Universal Data Access Components
Topic: [6.1.6 / PostgreSQL] Unexpected server response :.
Replies: 3
Views: 3305

Re: [6.1.6 / PostgreSQL] Unexpected server response :.

My problem (and beleive me) is that I'm not able to find a pattern to reproduce it.
I've a software connected 24 hours per days to an industrial hardware, collecting data and storing it into an postgresql databse. From time to time (that's to much for my pseudo real time software) I'm getting these exceptions...

Don't you have a debug unit that I can use instead ?
by swierzbicki
Tue 08 Sep 2015 14:34
Forum: Universal Data Access Components
Topic: [6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.
Replies: 18
Views: 6171

Re: [6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.

Hello,

I've already set unicode to true :

Code: Select all

  FConnection.SpecificOptions.Values['PostgreSQL.ConnectionTimeout=5'];
  FConnection.SpecificOptions.Values['PostgreSQL.UseUnicode=True'];
Here is my database settings

Code: Select all

CREATE DATABASE dodo
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'French_France.1252'
       LC_CTYPE = 'French_France.1252'
       CONNECTION LIMIT = -1;
@FCS : I'll try this instead
UniConnection1.SpecificOptions.Values['Charset']:='WIN1252'
by swierzbicki
Tue 08 Sep 2015 07:27
Forum: Universal Data Access Components
Topic: [6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.
Replies: 18
Views: 6171

[6.1.6 / PostgreSQL] Invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.

Hello,

I'm getting a lot of errors such this one ! How can I debug this ?

Code: Select all

exception class    : EUniError
exception message  : invalid byte sequence for encoding "UTF8": 0xe9 0x71 0x75.

main thread ($1158):
008b3487 +027 gestion_multicn.exe Uni                      HandleInternalError
008b7593 +037 gestion_multicn.exe Uni                      TCustomUniDataSet.InternalExecute
772171c6 +081 ntdll.dll                                    RtlRaiseStatus
77217052 +00a ntdll.dll                                    KiUserExceptionDispatcher
00c5e156 +01a gestion_multicn.exe PgClassesUni             TPgSQLCommand.PerformBindExecute
00c5e2f0 +15c gestion_multicn.exe PgClassesUni             TPgSQLCommand.InternalExecute
00c5d763 +027 gestion_multicn.exe PgClassesUni             TPgSQLCommand.Execute
0089af9c +010 gestion_multicn.exe CRAccess                 TCRRecordSet.ExecCommand
00c5ef78 +104 gestion_multicn.exe PgClassesUni             TPgSQLRecordSet.ExecCommand
0086b154 +008 gestion_multicn.exe DBAccess                 TCustomDADataSet.InternalExecute
008b757f +023 gestion_multicn.exe Uni                      TCustomUniDataSet.InternalExecute
0086b4ec +258 gestion_multicn.exe DBAccess                 TCustomDADataSet.Execute
00996120 +288 gestion_multicn.exe MultiCN          753 +36 TMultiCN.Archiver_Poste
0099dd58 +130 gestion_multicn.exe MultiCN         2081 +38 TMultiCN.SetPoste
00d2feaa +09a gestion_multicn.exe fmPoste          110 +21 TfrmPoste.BtDebutPosteClick
005be0bf +073 gestion_multicn.exe Vcl.Controls             TControl.Click
005e1d7e +01e gestion_multicn.exe Vcl.StdCtrls             TCustomButton.Click
006edd11 +0a5 gestion_multicn.exe Vcl.Buttons              TBitBtn.Click
005e288c +010 gestion_multicn.exe Vcl.StdCtrls             TCustomButton.CNCommand
005bdb51 +2bd gestion_multicn.exe Vcl.Controls             TControl.WndProc
005c26f9 +5e9 gestion_multicn.exe Vcl.Controls             TWinControl.WndProc
005e1a28 +06c gestion_multicn.exe Vcl.StdCtrls             TButtonControl.WndProc
005bd78c +024 gestion_multicn.exe Vcl.Controls             TControl.Perform
005c285f +023 gestion_multicn.exe Vcl.Controls             DoControlMsg
005c32e7 +00b gestion_multicn.exe Vcl.Controls             TWinControl.WMCommand
005bdb51 +2bd gestion_multicn.exe Vcl.Controls             TControl.WndProc
005c26f9 +5e9 gestion_multicn.exe Vcl.Controls             TWinControl.WndProc
005c1d18 +02c gestion_multicn.exe Vcl.Controls             TWinControl.MainWndProc
0053fbc0 +014 gestion_multicn.exe System.Classes           StdWndProc
76dd557d +044 USER32.dll                                   SendMessageW
76dd1b52 +016 USER32.dll                                   CallWindowProcW
005c280a +0e6 gestion_multicn.exe Vcl.Controls             TWinControl.DefaultHandler
005be514 +010 gestion_multicn.exe Vcl.Controls             TControl.WMLButtonUp
005bdb51 +2bd gestion_multicn.exe Vcl.Controls             TControl.WndProc
005c26f9 +5e9 gestion_multicn.exe Vcl.Controls             TWinControl.WndProc
005e1a28 +06c gestion_multicn.exe Vcl.StdCtrls             TButtonControl.WndProc
005c1d18 +02c gestion_multicn.exe Vcl.Controls             TWinControl.MainWndProc
0053fbc0 +014 gestion_multicn.exe System.Classes           StdWndProc
76ddcc6b +00a USER32.dll                                   DispatchMessageW
006cd8b3 +0f3 gestion_multicn.exe Vcl.Forms                TApplication.ProcessMessage
006cd8f6 +00a gestion_multicn.exe Vcl.Forms                TApplication.HandleMessage
006cdc29 +0c9 gestion_multicn.exe Vcl.Forms                TApplication.Run
00d72700 +16c gestion_multicn.exe Gestion_MultiCN   55 +20 initialization
76eded5a +010 kernel32.dll                                 BaseThreadInitThunk
by swierzbicki
Mon 07 Sep 2015 15:18
Forum: Universal Data Access Components
Topic: [6.1.6] UniScript doesn't find my parameter ?
Replies: 1
Views: 960

[6.1.6] UniScript doesn't find my parameter ?

Hello,

Here is my UniScript.SQL script :

Code: Select all

DELETE FROM  edi_livraisons_details_transferts
WHERE "Id_Type_EDI" = :Id_Type_EDI;

INSERT INTO edi_livraisons_details_transferts
SELECT 
  :Id_Type_EDI,
  "Code_Barre",
  "Id_Type_Produit",
  "Id_Produit",
  "Id_Taille_Produit",
  "PCB",
  "Id_Ordre_Fabrication",
  "Compteur",
  "Id_Emplacement_Colis",
  "Date_Mouvement",
  "Heure_Mouvement",
  "Date_Transfert",
  "Heure_Transfert",
  "Utilisateur",
  "Id_Commande",
  "Id_Transporteur",
  "Id_Entrepot"
FROM
  colis_mouvements_details
WHERE
  colis_mouvements_details."Id_Type_Mouvement_Colis" = 'XXX' AND 
  colis_mouvements_details."Date_Export" IS NULL AND 
  colis_mouvements_details."Id_Entrepot" = 'ZZZ';
ParamCheck is set to true. I'm getting an exception (parambyname not found) when doing :

Code: Select all

UniScript.Params.ParamByName('Id_Type_EDI').AsInterger := 0 ;
What am i doing wrong ?
by swierzbicki
Mon 07 Sep 2015 12:34
Forum: Universal Data Access Components
Topic: [6.1.6 / PostgreSQL] Unexpected server response :.
Replies: 3
Views: 3305

[6.1.6 / PostgreSQL] Unexpected server response :.

Hello,

I'm getting EPgError (postgresql x86 v9.4.4) and I don't know why this is happening.
count : 9
exception number : 18
exception class : EPgError
exception message : Unexpected server response :.

main thread ($234):
00c58f94 +0c0 gestion_multicn.exe PgClassesUni TPgSQLConnection.ProcessInternalException
00c5e3ff +26b gestion_multicn.exe PgClassesUni TPgSQLCommand.InternalExecute
00c5d763 +027 gestion_multicn.exe PgClassesUni TPgSQLCommand.Execute
00c58e8d +01d gestion_multicn.exe PgClassesUni TPgSQLConnection.ExecCommand
00c5a343 +113 gestion_multicn.exe PgClassesUni TPgSQLTransaction.StartTransaction
00881717 +10b gestion_multicn.exe DBAccess TDATransaction.StartTransaction
008654bf +017 gestion_multicn.exe DBAccess TCustomDAConnection.StartTransaction
008b5024 +000 gestion_multicn.exe Uni TUniConnection.StartTransaction
00998337 +23b gestion_multicn.exe MultiCN 971 +31 TMultiCN.Sauver_OdreFabricationEnCours
0099d693 +0ab gestion_multicn.exe MultiCN 1819 +43 TMultiCN.Sauvegarde_Quantite_Produits
009a003d +005 gestion_multicn.exe MultiCN 2604 +2 TMultiCN.Sauvegarde_donnees
0053bc0d +125 gestion_multicn.exe System.Classes CheckSynchronize
006ccf92 +76e gestion_multicn.exe Vcl.Forms TApplication.WndProc
0053fbc0 +014 gestion_multicn.exe System.Classes StdWndProc
7791cc6b +00a USER32.dll DispatchMessageW
006cd8b3 +0f3 gestion_multicn.exe Vcl.Forms TApplication.ProcessMessage
006cd8f6 +00a gestion_multicn.exe Vcl.Forms TApplication.HandleMessage
006cdc29 +0c9 gestion_multicn.exe Vcl.Forms TApplication.Run
00d72700 +16c gestion_multicn.exe Gestion_MultiCN 55 +20 initialization
76a5ed5a +010 kernel32.dll BaseThreadInitThunk
by swierzbicki
Thu 13 Aug 2015 16:18
Forum: Universal Data Access Components
Topic: Feature request : open dialog box for SQLite provider and alike...
Replies: 1
Views: 750

Feature request : open dialog box for SQLite provider and alike...

Hello,

Is it possible to enhance the TUniConnection design time dialog.
It could be convenient to have an open dialog box next the database dropdown list when SQLite provider (or alike) is choosen.
by swierzbicki
Thu 13 Aug 2015 16:15
Forum: Universal Data Access Components
Topic: How to export SQLite datas into PostgreSQL (same table structure)
Replies: 2
Views: 946

Re: How to export SQLite datas into PostgreSQL (same table structure)

Thank you for the tip. This is so far (in my early test) well working.
by swierzbicki
Thu 13 Aug 2015 08:43
Forum: Universal Data Access Components
Topic: SQLite Provider / TUniScript and bracket issue
Replies: 3
Views: 1539

Re: SQLite Provider / TUniScript issue

As a workaround, you can replace the ';' separator between different SQL statements in the script with any other (e.g., '/') and specify it in the Delimiter property of the UniScript component: Delimiter := '/'
Thank you
by swierzbicki
Wed 12 Aug 2015 15:56
Forum: Universal Data Access Components
Topic: SQLite Provider / TUniScript and bracket issue
Replies: 3
Views: 1539

Re: SQLite Provider / TUniScript and bracket issue

After looking deeper, it appear that TUniSCRIPT doesn't correctly handle "BEGIN" "END". There is an issue with the SQL parser.

Script Example :

Code: Select all

CREATE TRIGGER tgrAferDelete_colis_inventaires
  AFTER DELETE
  ON colis_inventaires
BEGIN
    DELETE FROM
        colis_inventaires_details
    WHERE
        Id_Inventaire = OLD.Id_Inventaire
END 
DBMonitor show that this script is executed in 2 steps :

Code: Select all

 CREATE TRIGGER tgrAferDelete_colis_inventaires
  AFTER DELETE
  ON colis_inventaires
BEGIN
    DELETE FROM
        colis_inventaires_details
    WHERE
        Id_Inventaire = OLD.Id_Inventaire
and finally

Code: Select all

END
by swierzbicki
Wed 12 Aug 2015 15:39
Forum: Universal Data Access Components
Topic: SQLite Provider / TUniScript and bracket issue
Replies: 3
Views: 1539

SQLite Provider / TUniScript and bracket issue

Hello,

TUniScript cannot execute this script. Looks like the issue is related with the trigger script execution.
TUniScript raise more exceptions when AutoCommit is set to true.

Here is a test script (using an TUniconnection that has forcecreatedatabase option to true)

Code: Select all

CREATE TABLE articles (
  Id_Article       integer PRIMARY KEY AUTOINCREMENT,
  Libelle_Article  varchar(250),
  Gencod_Article   varchar(250),
  Code_Article     varchar(250),
  Colisage         integer,
  Stock            float(50)
);

CREATE INDEX articles_Index01
  ON articles
  (Gencod_Article);

CREATE INDEX articles_Index02
  ON articles
  (Code_Article);

CREATE INDEX articles_Index03
  ON articles
  (Stock);

CREATE UNIQUE INDEX articles_Index04
  ON articles
  (Gencod_Article, Code_Article);

CREATE TABLE articles_details (
  Id_Article_detail  integer PRIMARY KEY AUTOINCREMENT,
  Gencod_Article     varchar(250),
  Code_Article       varchar(250),
  Gencod_Piece       varchar(250),
  Couleur            varchar(250),
  Taille             varchar(250),
  Nombre_Pieces      integer
);

CREATE INDEX articles_details_Index01
  ON articles_details
  (Gencod_Article);

CREATE INDEX articles_details_Index02
  ON articles_details
  (Gencod_Piece);

CREATE INDEX articles_details_Index03
  ON articles_details
  (Code_Article);

CREATE INDEX articles_details_Index04
  ON articles_details
  (Code_Article, Gencod_Article);

CREATE UNIQUE INDEX articles_details_Index05
  ON articles_details
  (Gencod_Article, Code_Article, Gencod_Piece);

CREATE TABLE colis_entree_details (
  Id_Colis_Entree_Detail  integer PRIMARY KEY,
  Code_Barre              varchar(250) DEFAULT '',
  Id_Emplacement_Colis    varchar(20) DEFAULT '',
  Utilisateur             varchar(20) DEFAULT '',
  Id_Device               varchar(20) DEFAULT '',
  Date_Entree             datetime,
  Version                 varchar(10) DEFAULT '',
  Date_Validation         datetime,
  Date_Transfert          datetime,
  Id_Transfert            varchar(20)
);

CREATE INDEX Idx_Code_Barre
  ON colis_entree_details
  (Code_Barre);

CREATE INDEX Idx_Date_Entree
  ON colis_entree_details
  (Date_Entree);

CREATE INDEX Idx_Date_Transfert
  ON colis_entree_details
  (Date_Transfert);

CREATE INDEX Idx_Date_Validation
  ON colis_entree_details
  (Date_Validation);

CREATE TABLE colis_inventaires (
  Id_Colis_Inventaire  integer PRIMARY KEY AUTOINCREMENT,
  Id_Inventaire        varchar(50),
  Date_Inventaire      datetime,
  Utilisateur          varchar(20),
  Id_Entrepot          varchar(50),
  Date_Validation      datetime,
  Date_Transfert       datetime,
  Statut               varchar(250)
);

CREATE INDEX colis_inventaires_Index01
  ON colis_inventaires
  (Id_Inventaire);

CREATE INDEX colis_inventaires_Index02
  ON colis_inventaires
  (Id_Inventaire, Date_Validation);

CREATE INDEX colis_inventaires_Index04
  ON colis_inventaires
  (Id_Inventaire, Date_Transfert);

CREATE TRIGGER tgrAferDelete_colis_inventaires
  AFTER DELETE
  ON colis_inventaires
BEGIN
    DELETE FROM
        [colis_inventaires_details]
    WHERE
        [Id_Inventaire] = [OLD].[Id_Inventaire];
    
END;

CREATE TABLE colis_inventaires_details (
  Id_Colis_Inventaire_Detail  integer PRIMARY KEY AUTOINCREMENT,
  Id_Inventaire               varchar(50),
  Type                        varchar(10),
  Travee                      varchar(250),
  Gencod_Article              varchar(250),
  Code_Article                varchar(250),
  Utilisateur                 varchar(50),
  Date_Inventaire             datetime,
  Code_Barre                  varchar(250)
);

CREATE INDEX colis_inventaires_details_Index01
  ON colis_inventaires_details
  (Id_Inventaire, Gencod_Article);

CREATE INDEX colis_inventaires_details_Index02
  ON colis_inventaires_details
  (Code_Barre, Id_Inventaire);

CREATE INDEX colis_inventaires_details_Index03
  ON colis_inventaires_details
  (Id_Inventaire);

CREATE INDEX colis_inventaires_details_Index06
  ON colis_inventaires_details
  (Type);

CREATE INDEX colis_inventaires_details_Index08
  ON colis_inventaires_details
  (Gencod_Article);

CREATE INDEX colis_inventaires_details_Index09
  ON colis_inventaires_details
  (Code_Article);

CREATE INDEX colis_inventaires_details_Index10
  ON colis_inventaires_details
  (Travee);

CREATE INDEX colis_inventaires_details_Index11
  ON colis_inventaires_details
  (Id_Inventaire, Gencod_Article, Code_Article, Type);

CREATE TRIGGER colis_inventaires_details_Trigger01
  AFTER DELETE
  ON colis_inventaires_details
BEGIN
      DELETE FROM
        [colis_inventaires_details_quantites]
    WHERE
        [Id_Inventaire] = [OLD].[Id_Inventaire] and
        [Code_Barre] = [OLD].[Code_Barre];
  
END;

CREATE TABLE colis_inventaires_details_quantites (
  Id_Colis_Inventaire_Detail_Quantite  integer PRIMARY KEY AUTOINCREMENT,
  Id_Inventaire                        varchar(50),
  Gencod_Article                       varchar(250),
  Code_Article                         varchar(250),
  Gencod_Piece                         varchar(250),
  Quantite_Pieces                      integer,
  Code_Barre                           varchar(250)
);

CREATE INDEX colis_inventaires_details_quantites_Index01
  ON colis_inventaires_details_quantites
  (Id_Inventaire);

CREATE INDEX colis_inventaires_details_quantites_Index02
  ON colis_inventaires_details_quantites
  (Gencod_Article, Code_Article, Gencod_Piece);

CREATE INDEX colis_inventaires_details_quantites_Index03
  ON colis_inventaires_details_quantites
  (Id_Inventaire, Code_Barre, Gencod_Article, Code_Article);

CREATE TABLE colis_preparations (
  Id_Colis_Preparation  integer PRIMARY KEY,
  Id_Bon_Preparation    varchar(50),
  Date_Preparation      datetime,
  Utilisateur           varchar(20),
  Id_Entrepot           varchar(50),
  Id_Commande           varchar(50),
  Id_Client             varchar(50),
  Total_Colis           float,
  Total_Poids           float,
  Total_Volume          float,
  Date_Validation       datetime,
  Date_Transfert        datetime,
  Statut                varchar(250)
);

CREATE INDEX colis_preparations_Index01
  ON colis_preparations
  (Id_Bon_Preparation);

CREATE INDEX colis_preparations_Index02
  ON colis_preparations
  (Id_Bon_Preparation, Date_Validation);

CREATE INDEX colis_preparations_Index03
  ON colis_preparations
  (Id_Bon_Preparation, Date_Transfert);

CREATE INDEX colis_preparations_Index04
  ON colis_preparations
  (Id_Bon_Preparation, Date_Preparation);

CREATE TRIGGER tgrAferDelete
  AFTER DELETE
  ON colis_preparations
BEGIN
    DELETE FROM
        [Colis_Preparations_details]
    WHERE
        [Id_Bon_Preparation] = [OLD].[Id_Bon_Preparation];

    DELETE FROM
        [Colis_Preparations_items_scannes]
    WHERE
        [Id_Bon_Preparation] = [OLD].[Id_Bon_Preparation];
        
    DELETE FROM
        [Colis_Preparations_cartons_ouverts]
    WHERE
            [Id_Bon_Preparation] = [OLD].[Id_Bon_Preparation];        
END;

CREATE TABLE colis_preparations_cartons_ouverts (
  Id_Colis_Preparation_Carton_Ouvert  integer PRIMARY KEY AUTOINCREMENT,
  Id_Colis_Preparation_Item_Scanne    integer,
  Id_Bon_Preparation                  varchar(50),
  Gencod_Article                      varchar(250),
  Gencod_Piece                        varchar(250),
  Code_Barre                          varchar(250),
  Colisage                            integer,
  Prepare                             integer,
  Original                            boolean,
  Utilisateur                         varchar(50)
);

CREATE INDEX colis_preparations_cartons_ouverts_Index01
  ON colis_preparations_cartons_ouverts
  (Id_Bon_Preparation, Gencod_Article, Gencod_Piece, Code_Barre);

CREATE INDEX colis_preparations_cartons_ouverts_Index02
  ON colis_preparations_cartons_ouverts
  (Id_Bon_Preparation);

CREATE INDEX colis_preparations_cartons_ouverts_Index03
  ON colis_preparations_cartons_ouverts
  (Gencod_Article);

CREATE INDEX colis_preparations_cartons_ouverts_Index04
  ON colis_preparations_cartons_ouverts
  (Code_Barre);

CREATE INDEX colis_preparations_cartons_ouverts_Index05
  ON colis_preparations_cartons_ouverts
  (Gencod_Piece);

CREATE INDEX colis_preparations_cartons_ouverts_Index06
  ON colis_preparations_cartons_ouverts
  (Original);

CREATE INDEX colis_preparations_cartons_ouverts_Index07
  ON colis_preparations_cartons_ouverts
  (Prepare);

CREATE INDEX colis_preparations_cartons_ouverts_Index08
  ON colis_preparations_cartons_ouverts
  (Id_Bon_Preparation, Original);

CREATE TABLE colis_preparations_details (
  Id_Colis_Preparation_Detail  integer PRIMARY KEY AUTOINCREMENT,
  Id_Bon_Preparation           varchar(50),
  Id_Preparation_Sequence      integer,
  Id_Preparation_Detail_Piece  integer,
  Type                         varchar(10),
  Travee                       varchar(250),
  Gencod_Article               varchar(250),
  Code_Article                 varchar(250),
  Libelle_Article              varchar(250),
  Libelle_Piece                varchar(250),
  Gencod_Piece                 varchar(250),
  Nombre_Cartons               integer,
  Nombre_Pieces                integer,
  Colisage                     integer,
  Total_Pieces                 integer
);

CREATE INDEX colis_preparations_details_Index01
  ON colis_preparations_details
  (Id_Bon_Preparation, Gencod_Article);

CREATE INDEX colis_preparations_details_Index02
  ON colis_preparations_details
  (Id_Bon_Preparation, Gencod_Piece);

CREATE INDEX colis_preparations_details_Index03
  ON colis_preparations_details
  (Id_Bon_Preparation);

CREATE INDEX colis_preparations_details_Index04
  ON colis_preparations_details
  (Nombre_Cartons);

CREATE INDEX colis_preparations_details_Index05
  ON colis_preparations_details
  (Nombre_Pieces);

CREATE INDEX colis_preparations_details_Index06
  ON colis_preparations_details
  (Type);

CREATE INDEX colis_preparations_details_Index07
  ON colis_preparations_details
  (Gencod_Piece);

CREATE INDEX colis_preparations_details_Index08
  ON colis_preparations_details
  (Gencod_Article);

CREATE INDEX colis_preparations_details_Index09
  ON colis_preparations_details
  (Code_Article);

CREATE INDEX colis_preparations_details_Index10
  ON colis_preparations_details
  (Travee);

CREATE INDEX colis_preparations_details_Index11
  ON colis_preparations_details
  (Id_Bon_Preparation, Gencod_Article, Code_Article, Type);

CREATE TABLE colis_preparations_items_scannes (
  Id_Colis_Preparation_Item_Scanne  integer PRIMARY KEY AUTOINCREMENT,
  Id_Bon_Preparation                varchar(50),
  Type                              varchar(10),
  Gencod_Article                    varchar(250),
  Code_Article                      varchar(250),
  Gencod_Piece                      varchar(250),
  Code_Barre                        varchar(250),
  Quantite_Pieces                   integer,
  Utilisateur                       varchar,
  Date_Preparation                  datetime,
  Original                          boolean
);

CREATE INDEX colis_preparations_cartons_scannes_Index01
  ON colis_preparations_items_scannes
  (Id_Bon_Preparation, Gencod_Article);

CREATE INDEX colis_preparations_cartons_scannes_Index02
  ON colis_preparations_items_scannes
  (Id_Bon_Preparation);

CREATE INDEX colis_preparations_cartons_scannes_Index03
  ON colis_preparations_items_scannes
  (Id_Bon_Preparation, Quantite_Pieces);

CREATE INDEX colis_preparations_cartons_scannes_Index04
  ON colis_preparations_items_scannes
  (Quantite_Pieces);

CREATE INDEX colis_preparations_cartons_scannes_Index05
  ON colis_preparations_items_scannes
  (Type);

CREATE INDEX colis_preparations_cartons_scannes_Index06
  ON colis_preparations_items_scannes
  (Id_Bon_Preparation, Type, Gencod_Article, Code_Article);

CREATE INDEX colis_preparations_cartons_scannes_Index07
  ON colis_preparations_items_scannes
  (Id_Bon_Preparation, Type, Gencod_Article, Gencod_Piece);

CREATE INDEX colis_preparations_cartons_scannes_Index08
  ON colis_preparations_items_scannes
  (Gencod_Article);

CREATE INDEX colis_preparations_cartons_scannes_Index09
  ON colis_preparations_items_scannes
  (Gencod_Piece);

CREATE INDEX colis_preparations_cartons_scannes_Index10
  ON colis_preparations_items_scannes
  (Code_Barre);

CREATE INDEX colis_preparations_items_scannes_Index01
  ON colis_preparations_items_scannes
  (Id_Bon_Preparation, Type, Gencod_Article, Gencod_Piece, Code_Barre);

CREATE INDEX colis_preparations_items_scannes_Index02
  ON colis_preparations_items_scannes
  (Original);

CREATE INDEX colis_preparations_items_scannes_Index03
  ON colis_preparations_items_scannes
  (Code_Article);

CREATE TRIGGER colis_preparations_items_scannes_Trigger01
  AFTER DELETE
  ON colis_preparations_items_scannes
BEGIN
    DELETE FROM
        [Colis_Preparations_cartons_ouverts]
    WHERE
        [Id_Colis_Preparation_Item_Scanne] = [OLD].[Id_Colis_Preparation_Item_Scanne];
END;

CREATE TABLE preferences (
  Id_Preference  varchar(50),
  Value          varchar(250),
  /* Keys */
  CONSTRAINT sqlite_autoindex_preferences_1
    PRIMARY KEY (Id_Preference)
);

CREATE TABLE utilisateurs (
  Identifiant   varchar(250),
  Nom_Complet   varchar(250),
  Mot_De_Passe  varchar(250)
);

CREATE INDEX utilisateurs_Index01
  ON utilisateurs
  (Identifiant);



CREATE VIEW colis_preparations_cartons_ouverts_ws
AS
SELECT 
  Id_Bon_Preparation,
  Gencod_Article,
  Gencod_Piece,
  Code_Barre,
  Colisage,
   SUM(Prepare) AS Prepare
FROM
  colis_preparations_cartons_ouverts
GROUP BY
  Id_Bon_Preparation,
  Gencod_Article,
  Gencod_Piece,
  Code_Barre;

CREATE VIEW colis_preparations_cartons_total
AS
SELECT 
 Id_Bon_Preparation,
 type,
 Gencod_Article,
 Code_article,
 COUNT(Gencod_Article) AS Total_Cartons
FROM
  colis_preparations_items_scannes
WHERE
 
  Type in ('C','R')
GROUP BY
  Id_Bon_Preparation,
  type,
  Gencod_Article,
  code_article;

CREATE VIEW colis_preparations_items_scannes_ws
AS
SELECT 
  Id_Bon_Preparation,
  type,
  Gencod_Article,
  Code_Article,  
  Gencod_Piece,
  Code_Barre,
  Sum(Quantite_Pieces) as Quantite_Pieces,
  Date_Preparation,
  utilisateur
FROM
  colis_preparations_items_scannes
GROUP BY
  Id_Bon_Preparation,
  type,
  Gencod_Article,
  Code_Article,
  Gencod_Piece,
  Code_Barre;

CREATE VIEW colis_preparations_pieces_total
AS
SELECT 
Id_Bon_Preparation,
  Type,
  Gencod_Article,
  Gencod_Piece,
 SUM(Quantite_Pieces) AS Total_Pieces
FROM
  colis_preparations_items_scannes
WHERE
  Type = 'P'
GROUP BY
  Id_Bon_Preparation,
  Type,
  Gencod_Article,
  Gencod_Piece;
  
CREATE VIEW colis_preparations_details_restants
AS
SELECT 
  colis_preparations_details.*,
  
  
  (colis_preparations_details.Nombre_Cartons - IfNull(colis_preparations_cartons_total.Total_Cartons,0)) as Nombre_Cartons_Restants,
  (colis_preparations_details.Nombre_Pieces - IfNull(colis_preparations_pieces_total.Total_Pieces,0)) as Nombre_Pieces_Restantes,
  
  colis_preparations_details.Total_Pieces - ((IfNull(colis_preparations_cartons_total.Total_Cartons,0)* colis_preparations_details.Colisage) + IfNull(colis_preparations_pieces_total.Total_Pieces,0)) as Total_Pieces_Restantes   
FROM
  colis_preparations_details
  LEFT OUTER JOIN colis_preparations_cartons_total ON (colis_preparations_details.Id_Bon_Preparation = colis_preparations_cartons_total.Id_Bon_Preparation
  and colis_preparations_details.Gencod_Article = colis_preparations_cartons_total.Gencod_Article  
  and colis_preparations_details.Code_Article = colis_preparations_cartons_total.Code_Article
  and colis_preparations_details.Type = colis_preparations_cartons_total.Type )
 

 
  LEFT OUTER JOIN colis_preparations_pieces_total ON (colis_preparations_details.Id_Bon_Preparation = colis_preparations_pieces_total.Id_Bon_Preparation
  and colis_preparations_details.Gencod_Article = colis_preparations_pieces_total.Gencod_Article 
  and colis_preparations_details.Gencod_Piece = colis_preparations_pieces_total.Gencod_Piece 
  and colis_preparations_details.Type = colis_preparations_pieces_total.Type  
  )

  WHERE not((colis_preparations_details.Nombre_Cartons = 0) and (colis_preparations_details.Nombre_Pieces = 0))

ORDER BY
colis_preparations_details.ID_Colis_Preparation_Detail;
by swierzbicki
Tue 11 Aug 2015 16:10
Forum: Universal Data Access Components
Topic: Postgresql slow query fetch
Replies: 27
Views: 4460

Re: Postgresql slow query fetch

Thank you for the fix.
by swierzbicki
Tue 11 Aug 2015 16:08
Forum: Universal Data Access Components
Topic: How to export SQLite datas into PostgreSQL (same table structure)
Replies: 2
Views: 946

How to export SQLite datas into PostgreSQL (same table structure)

Hello,

I need to transfert SQLite datas into PostgreSQL.
Both database does have the same table structure, fields names, fields type...

When dumping SQLite Database (TUniDump), Boolean fields value are exported as integer values. SQL script cannot be executed under PostgreSQL as boolean fields should be exported as TRUE or FALSE.

In my case, dump sounds not like the way to go. What will you advise me ?