Re: [SQL] Deadlock on transaction

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ezequias Rodrigues da Rocha wrote:
This is delphi. I don't intent you understand but the sql actions are quite
simple (I am reading a list of numbers).

Well, let's see - the last Pascal I did was in 1986 I think...

        If not dm.database1.InTransaction then
          dm.database1.StartTransaction;

        For i:= 0 to memo1.Lines.Count - 1 do

Loop through your import.

          Begin
            // Catching ID
             dm.qQ1.SQL.text:= Concat('select id from base.cartao where
numero = ', memo1.lines[i]);
             dm.qQ1.open;
             cartaoID:= dm.qQ1.fieldByName('id').asString;
            // Cathing the ticket ID

OK, you're fetching ticket IDs one at a time.

             dm.qQ1.SQL.clear;
             dm.qQ1.SQL.text:= Concat('select nextval(',QuotedStr('
base.ingresso_id') , ')');
             dm.qQ1.open;
             IngressoID:= dm.qQ1.fieldByName('nextval').asString;

And now you've generated a new ID from a sequence.

             // $$$$$$$$$$ Recording Tickets $$$$$$$$$$
             dm.Qq1.sql.text:= Concat('Insert into base.ingresso values ('
, QuotedStr(IngressoID), ',' , EstadoID, ',' , 'now()', ',' , valor, ',' ,
valor_promotor, ',' , AssentoID, ',', CaixaID, ',' , CartaoID, ',' ,
PromocaoID, ',' , SessaoID, ',' , VendedorID, ')');
   //          Showmessage(dm.Qq1.sql.text);
             dm.Qq1.execSQL;

Insert one row into "ingresso".

             // ########### Recording Tickets ###########

             // Pegando o Id do Bilhete no PostgreSQL
               dm.qQ1.SQL.clear;
               dm.qQ1.SQL.text:= Concat('select nextval(',QuotedStr('
base.bilhete_id') , ')');
               dm.qQ1.open;
               BilheteID:= dm.qQ1.fieldByName('nextval').asString;

               dm.qQ1.SQL.clear;
               dm.qQ1.SQL.add(Concat('Insert into base.bilhete (id, estado,
uso_sequencia, promocao_documento, assento_id, cartao_id, ingresso_id,
promocao_id, sessao_id, vendedor_venda_id )'));
               dm.qQ1.SQL.add(Concat('values(', BilheteID, ',' ,
QuotedStr(EstadoID), ',' , '0,0', ',' , QuotedStr(AssentoID), ',' ,
QuotedStr(CartaoID), ',' , QuotedStr(IngressoID) , ',' ,
QuotedStr(PromocaoID), ',' , QuotedStr(SessaoID) , ',' ,
QuotedStr(VendedorID), ')' ) );

               dm.qQ1.execSQL;

Insert a row into "bilhete".


        end;

I don't see anything like "dm.database1.CommitTransaction" - are you sure you are committing after the inserts?


One other point - if Delphi doesn't offer something like it, you might find it useful to write a function that makes it easier to build queries:
  my_db_func('INSERT INTO foo (id,a,b,c) VALUES (?,?,?,?)',
  'NUM,TEXT,DATE,DATE',
  variable1,variable2,variable3...);
I'd be surprised if there wasn't something like that already though.

--
  Richard Huxton
  Archonet Ltd


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux