Thank you, Mark, for such a complete and clear answer. You are a big help to
me. What you said agrees and helps me understand what I have read. What I was
concerned about was my Execute Blocks were too big, and had to be split into
several smaller blocks. I wanted to make sure all the blocks
Thank you Karol, I did not want Parallel, so good news.
I didn't see a way to edit the previous post, so sorry for this afterthought.
My concert are:
1. Since the EBs are executed on the Server, will a transaction created in
Delphi have any benefit for controlling the sequence of execution, or the
ability to roll back if a failure occurs in block
To keep Execute Blocks within size limits, my Delphi program breaks them into
several smaller blocks. Since the commands within the blocks actually execute
on the server, is there any advantage to putting several blocks in a single
transaction?
I have limited block size to < 64 K and <255 inserts. That creates several
blocks to be executed in order to insert all the data. I'm hesitant to execute
them serially. Is it acceptable to enclose all the blocks inside a transaction
that can be rolled back if a failure occurs later in the
I have a Delphi program that assembles an Execute Block with a lot of Insert
statements. The Insert statements can have an unknown number of columns up to
about 35. There are no BLOBs, and all fields are text. The records come from a
CSV or Excel file, and have an unknown number, possibly 2,000
Thanks for that suggestion. I have read that before, but I don't see how it can
be true in a multi-user environment. Of course, I have never tried it. I
suspect it would be true if the source data was already in a table on the
server, but mine is newly entered data by a user on a network
I dynamically create Execute Block statements to insert many rows of data. For
example, one attempt has over 500 Inserts, which fails. I suspect some kind of
limit has been reached (memory, or number of commands). What is the best way
to accomplish very large batches?
Thank you, Karol. That fixed it. Your eyes are much better than mine. I should
have caught that myself but thank you for your help.
Because IBDAC calls the Generator directly, the Trigger was not a problem
until I tried to use Execute Block.
Sorry for the first example. I knew it didn't work. I accidentally copied it
from an attempt that didn't work. I really meant to copy the second example but
didn't catch my error until after I posted.
When using the second example, the Primary Key is not updated which produces an
error
I also tried:
set term ^ ;
EXECUTE BLOCK AS BEGIN
INSERT INTO ACORD_DATA (FK_ID, D_ACORD_FORM_FIELD_NAME,
D_ACORD_FORM_FIELD_TYPE, STR_VALUE) VALUES (973, 'FrmCmplDtA', 'CHAR',
'02/26/2018');
INSERT INTO ACORD_DATA (FK_ID, D_ACORD_FORM_FIELD_NAME,
D_ACORD_FORM_FIELD_TYPE, STR_VALUE)
Firebird 2.14, Delphi 2007, Multi-User App, IBDac components.
I need to insert many multiple rows ( 200 to 600) in a single event. To avoid
network slowing the process, I'm trying Execute Block for the first time (just
learned about it). The code below doesn't work because the Primary Key
CORRECTION:
Error Message:
Project ABS3.exe raised exception class EIBCError with message '
Dynamic SQL Error
SQL error code = -104
Token unknown - line 57, column 19
BB'.
FB 2.14 - Delphi 2007 - IBDAC TIBCScript
Although I'm certain this is not a Delphi problem, I've included a copy of the
commands used to create the SQL. Those commands work in FlameRobin, and in
IBExpert. I used both to create working DDL, which I copied into my delphi
program. Any help or
Thanks, Helen. I would not have considered a computed column. I use computed
fields in Delphi, but it is a new concept for me in Firebird. I'll play around
with that.
Thanks to everyone for the input. If I could normalize, or do more data entry
validation (or verification for that matter) I would. The end users are
insurance agents who represent many different insurance companies, Each company
has a different policy number format and length. Some add dashes
Users can enter values with dashes (-) in random locations. I don't know where
they might put them. I need to select a record using a where clause that
doesn't have those dashes. For example, the user might record an insurance
policy number as 12-345678-01 or 123-456-789-01. All I will know are
17 matches
Mail list logo