Newsgroup: it.comp.lang.delphi
Titolo: Inserire 700Mila record in IB6

Provo ad inserire in una tabella IB (di circa 300byte x Record)
700.000 record, arrivato sui 200.000 sembra che il computer quasi
vadi a replay. Forse devo farlo con comandi diretti del server ?
Non riesco a capire perche' rallenti in questo modo.

 vadi a replay. Forse devo farlo con comandi diretti del server ?
come lo stai facendo?
(per curiosita', non so se ti posso aiutare...)
Ciao,
Alan Solo


Utilizzo i componenti standard, TDataBase e TTable quindi
Table.Insert e ...  poi Table.Post, forse devo usare le transazioni del
DataBase,
ovvere DB.StartTransaction ... e poi DB.Commit ?

 ha scritto nel messaggio
news:tSRo6.90330$Y93.2...@news.infostrada.it...

Se vi sono vincoli su qualche campo (ad esempio un vincolo di unicità di una
chiave) il tempo potrebbe essere giustificato da una verifica su qualche
centinaio di migliaia di record.
----
Sergio Bianchi


non ho nessuna Key attiva neanche la Primary Key, forse devo fare un commit
ogni 50.000 record e riattivare la transazione, questa non l'ho provata.
Comunque sembra che ad un certo punto l'applicazione si blocchi, infatti
dopo 6 ore sono arrivato ad inserire 190.000 record, ho dovuto stoppare.



Scusa, se ho capito bene, stai utilizzando un "live dataset" per
inserire i record. Questo e' deleterio per le prestazioni: prova ad
usare un comando SQL INSERT INTO, le cose dovrebbero migliorare
decisamente.
Ciao,
Massimo.

 ha scritto nel messaggio
news:XbRo6.88880$Y93.2...@news.infostrada.it...


 wrote in message
tSRo6.90330$Y93.2...@news.infostrada.it...

Come hanno detto gli altri, anche io userei SQL puro per inserire i record
nella tabella, un altra piccola cosa : hai provato ad usare gli IBX al posto
che i TDataSet ? Dovrebbero essere più indicati per la comunicazione con
Interbase (io li uso parecchio, non mi hanno mai dato un problema e ottengo
sempre prestazioni più che decenti).
C'è un componente : TIBSQL che ti permette di inviare SQL puro ad
Interbase...
CYO,
--
RaSca
http://web.tiscalinet.it/rascasoft

Consiglio:
1) Imposta una primary key (piuttosto aggiungi un campo autoincrementante)
2) Se puoi usa le stored procedure...
ciao
Solid Snake IT



 ha scritto nel messaggio
news:XbRo6.88880$Y93.2...@news.infostrada.it...


 ha scritto:

ti hanno dato tutti ottimi consigli
rissunto: butta BDE e usa IBX/FIB/IBO, o almeno, non usare TTable, meglio
TQuery
poi uno start transaction non guasterebbe come hai detto tu, inoltre
verifica (se decidi di usare BDE) con non ci sia AutoCommit nell'alias e
che SQLPassThougMode sia impostato su "server"
ps: per cosa ti serve? devi importare dati dall'esterno, se si' dai
un'occhiata a EXTERNAL TABLE
pps: vedo che molti usano IB (o almeno sembra...) bene, bene :)
Ciao,
Alan Solo

Alan Solo
Non io :) Io uso SQL Server ma certe considerazioni vanno bene anche
per IB.
Ciao,
Massimo.
-- 
"Ciao Rex, che cavolo di situazione eh? Due dentro, due fuori, puo' succedere di tutto!"


dove???
Ciao.

 Cosa e' IBO ?
E' una suite di più di 40 componenti [a pagamento] simili agli IBX che
garantiscono un accesso immediato e veloce a database interbase.
ti spiegano come funzionano qui :
http://www.interbase2000.com/tools.htm
Questo è il sito ufficiale :
http://www.ibobjects.com/
Io li ho provati e posso dire che sono una figata, solo che costano un
pò...395 dollaroni (qusi 800 carte !) per la versione completa di
sorgenti...


 dove???
manuale di IB
CREATE TABLE TABELLA_ESTERNA EXTERNAL FILE 'file.txt'
(CAMPO1 CHAR(10),
 CAMPO2 CHAR(20),
 NEWLINE CHAR(2)); /* oppure NEWLINE CHAR(1) sotto Unix/Linux */
crea una tabella "TABELLA_ESTERNA" che legge dal file di testo 'file.txt'
Ciao,
Alan Solo

vadi a replay.
"vadi" lo diceva sempre un certo Ragioniere di nome Ugo  ;-)
----------------------------------------------------------
Il vero problema non č tanto sapere se le macchine pensano
bensě se gli uomini pensano. B.F. SKINNER (1904-90)
----------------------------------------------------------