Jump to content
Squamis

From Delphi+PostgresDAC (PostgresSQL) To Delphi+FireDAC (PostgresSQL)

Recommended Posts

Helllo!

Last week I decided convert my big project from Delphi+PostgresDAC (PostgresSQL) to Delphi+FireDAC (PostgresSQL).

I find a lot of interesting things:

 

1. I can't add several "Insert" sql-queries into one TFDCommand. I've tried to use delimiter ';' - nothing. I want to use one command Execute to run several queries "Insert".

 

2. Some SQL-query works in different way (about speed)

in SQLManager works very fast

in Delphi+PostgresDAC mode works very fast

in Delphi+FireDAC mode - freeze

select * from vdata."systems" where ((fldidxsystem = any(:fldidxsystem::bigint[])) or (:fldidxsystem::bigint[] = '{}'))

only when I rewrite SQL-query - work very fast.

select * from vdata."systems" where ((fldidxsystem = any(:fldidxsystem::bigint[])) or (:fldidxsystem::varchar = '{}'))

Maybe someone have any answers about it?

Share this post


Link to post
2 minutes ago, programmerdelphi2k said:

I dont know if help you, but do you try use "Arrays DML"?

No. I mean fully different queries.

insert into table1....;

delete from table2...;

Share this post


Link to post
34 minutes ago, Squamis said:

No. I mean fully different queries.

insert into table1....;

delete from table2...;

The first point says something else.

Share this post


Link to post
4 minutes ago, Stano said:

The first point says something else

 

May be. But, I mean the next:

I want in one TFDCommand component set several different queries, for example:

insert into table1....;

delete from table2...;

 

and in code just run Qr1.Execute;

 

I don't want create two TFDComponent.

Edited by Squamis

Share this post


Link to post

Well, then the "Array DML technique" would allow multiple "DML commands" with parameters to be automated!
so if using:
"insert ....; "delete ...."   we could produce a "multiple executions to 2 commands" ... with each execution of the array!

Share this post


Link to post

Thank for all! Thank for your time!

It is really fine solution fo me:

DO $$
BEGIN
INSERT INTO vdata.sides(fldside_art, fldside_name) VALUES('a','b');
INSERT INTO vdata.sides(fldside_art, fldside_name) VALUES('c','d');
delete from vdata.sides where fldside_art = 'a';
END $$

Tommorow I''l try "Array DML" and "TFDScript"

Edited by Squamis

Share this post


Link to post
6 hours ago, Squamis said:

Thank for all! Thank for your time!

It is really fine solution fo me:


DO $$
BEGIN
INSERT INTO vdata.sides(fldside_art, fldside_name) VALUES('a','b');
INSERT INTO vdata.sides(fldside_art, fldside_name) VALUES('c','d');
delete from vdata.sides where fldside_art = 'a';
END $$

Tommorow I''l try "Array DML" and "TFDScript"

Use TFDScript with just the INSERT and DELETE statements.

 

Edited by weirdo12

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×