Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326

    [firebird] query con file TXT

    Ciao a tutti,

    dovrei eseguire un comando del genere:

    codice:
    update Table set table.FLAG='S' where table.id in (1,2,3,4,5.........)
    ma credo purtroppo che ci siano dei 'limiti' per indicare il numero di id di riferimento... credo che non possono essere più di 1500 valori

    dato che questi 'id' vengono catturati da una serie di operazioni fatte dall'utente e dato che possono anche essere molti più di 1500 sono alla ricerca di soluzioni alternative.

    e' possibile fare una cosa del genere:

    codice:
    update Table set table.FLAG='S' where table.id in (file.txt)
    o in alternativa avete suggerimenti?

    grazie

  2. #2
    ma non credi perché non hai provato o non credi perché ti da errore?
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao

    Originariamente inviato da daniele_dll
    ma non credi perché non hai provato o non credi perché ti da errore?
    non credo perchè non conosco una sintassi per fare questo e non saprei come provare

    grazie

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da 123delphi321
    non credo perchè non conosco una sintassi per fare questo e non saprei come provare
    Puoi caricare il contenuto del file TXT da codice in una variabile che poi andrai a concatenare alla tua query.

    In questo caso il file va caricato usando il linguaggio di programmazione, anche perchè di solito prima si verificata la presenza del file.


  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    grazie dell'aiuto....

    questa prova già l'ho fatta....
    va in errore quando ci sono troppi id nella variabile.


    la mia tabella ha circa 10700 records.

    una sintassi che sicuramente funziona è la seguente:
    codice:
    update listainvitati
    set listainvitati.spedito='N'
    where listainvitati.id in (select listainvitati.id from listainvitati)
    quindi questo funziona per un numero di records elevato.

    a questo punto è solo una questione di come scrivere questo comando.

    il problena nasce quando l'utente seleziona filtrando (anche manualmente) i record in una apposita dbgrid e poi vuole effettuare l'update dei record visualizzati.

    in questo caso io eseguo un primo ciclo, che scorre tutta la griglia, per catturare in una variabile tutti gli 'id' visualizzati per poi concatenare la variabile nella stringa dell'update.

    potrei scorrere la griglia e settare il flag spedito, ma questo impiegherebbe moltissimo tempo in più rispetto al comando di update

    codice:
    update listainvitati
    set listainvitati.spedito='N'
    where listainvitati.id in (.....)
    grazie

  6. #6
    beh, allora più semplicemente lancia gli update di massa a blocchi

    spezza il blocco unico di id in blocchi da 500 elementi, ad esempio, cosi da lanciare meno query ma andare comunque veloci

    comunque il problema mi sembra strano sia relativo alla lunghezza del comando (nel senso che non c'è motivo che firebird non lo supporti) piuttosto potrebbe esserci un limite sulla dimensione dei pacchetti che firebird deve analizzare (cosi com'è per mysql ad esempio)
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Originariamente inviato da daniele_dll
    beh, allora più semplicemente lancia gli update di massa a blocchi

    spezza il blocco unico di id in blocchi da 500 elementi, ad esempio, cosi da lanciare meno query ma andare comunque veloci

    comunque il problema mi sembra strano sia relativo alla lunghezza del comando (nel senso che non c'è motivo che firebird non lo supporti) piuttosto potrebbe esserci un limite sulla dimensione dei pacchetti che firebird deve analizzare (cosi com'è per mysql ad esempio)
    ho provato a spezzare ed a fare n update..... cosi non si blocca.

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.