Newsgroup: it.comp.lang.vo-clipper
Titolo: Help SQL

Possibile che nessuno sappia rispondere ai miei aiuto sulla programmazione
SQL.
Dopo vari tentativi sono riuscito a risolvere da solo i vari problemi posti.
Ora se ne è creato uno nuovo.
Non riesco a far funzionare la SEEK su una tabela SQL.
L'aggiornamento dei dati è molto lento, per aggiornare una cinquantina di
record ci impiega quasi un'ora, forse c'è qualcosa di sbagliato.
Fra le varie note tecniche scaricate dal 
CAI.COM
 sembra che i comandi dati
non siano sbagliati, ma allora perchè ci impiega tutto questo tempo?
Grazie se qualcuno mi risponde.
-----------------------------
LAFFI PIERGUIDO
Via Teano, 36 - 04100 Latina
Tel.: 0773/696109 
Cel.: 0338/7345869
E-Mail : 
pa0...@panservice.it
-----------------------------
--
Posted from 
ro...@mail.panservice.it
 [194.247.170.14]
via Mailgate.ORG Server - 
http://www.mailgate.org

...


non siano sbagliati, ma allora perch=E8 ci impiega tutto questo tempo?
Lavorare con SQL via ODBC purtroppo è lento di sua natura, basta
popolare una DATABROWSER con parecchie righe di un DBF aperto con ODBC
per notare la differenza rispetto all'accesso nativo via RDD.
Io credo dipenda molto anche dal driver e dal database utilizzato,
infatti provando con i database Access (mdb) si può utilizzare la
sintassi SQL in modo diretto, senza passare da ODBC, migliorando
nettamente le prestazioni.
Per quanto riguarda la seek, una prova da fare potrebbe essere di
utilizzare la stringa (vado a memoria)
SELECT TOP 1 * FROM <TABELLA> WHERE <CONDIZIONE>
che recupera *solo* la prima riga che soddisfa una determinata
condizione per vedere se i tempi sono gli stessi.
Antonello.

Dopo vari tentativi sono riuscito a risolvere da solo i vari problemi
posti.
Ora se ne è creato uno nuovo.
Non riesco a far funzionare la SEEK su una tabela SQL.
L'aggiornamento dei dati è molto lento, per aggiornare una cinquantina di
non ho mai usato SQL ma da quanto ne so l'equivalente della SEEK in DBF
è LOCATE in SQL.
saluti
Paolo Calzi

...
Salve Angelo, ci possiamo dare del tu ?
Ti elenco un paio di problemi che ancora non sono riuscito a risolvere.
1) Devo leggere delle tabelle SQL di un'applicazione di contabilità
installata su un Server NT. Riesco ad aprire le tabelle, visualizzarle, il
grande problema sta nell'aggiornarle. Sul server con un processore Pentium,
per aggiornare una decina di record ci impiegava anche oltre mezz'ora, deve
soltanto riscrivere un protocollo, impegnando il processore (vedi il
grafico del task di NT) fino al 100%, bloccando di conseguenza tutti gli
altri utenti.
Su un server con due processori pentium, questa attesa di è ridotta di
circa la metà, ma mi sembra che quindici minuti per soli 10 record siano
ancora troppi, ogni mese i record da aggiornare sono parecchi.
2) Aperta una tabella SQL, sembre su un server NT, non riesco ad eseguire
la SEEK.
In entrambi i casi uso per aprire la tabella il comando SQLSELECT, seguito
dall'EXECUTE.
Ciao. Pierguido


Prova con:
SELECT <CAMPI> FROM <TABELLA> WHERE <CONDIZIONE> ORDER BY <CAMPI>
Dalla mia parte abbiamo eseguito dei test per verificare i tempi di accesso
ad un DBF tramite RDD
e ad un file MDB(database Access) tramite ODBC.
DBF    -> 50.000 records, 6 sec. circa
ODBC -> 50.000 records, 1 sec. circa
Ricordati di creare le chiavi primarie ed eventualmente quelle secondarie
per SQL altrimenti
ogni volta dovrà ricostruirsele.
Comunque ( io ho alle spalle 3 anni di esperienza SQL) il passaggio non è
semplice per un
programmatore che è abituato ad utilizzare una base dati sequenziale quale
DBF.
Ti consiglieri qualche libro, prova con quelli di H. Gupta.
Ciao.

Non saprei se il problema è dei databases o dei drive ODBC. 
Prima di utilizzare VO usavamo il Visual Dbase, per un po di tempo ha
funzionato, all'improvviso, senza effettuare cambiamenti sul server NT, non
ha più funzionato, dava errori il compilatore stesso. Quando funzionava, la
velocità di elaborazione era accettabile.
Abbiamo fatto dei tentativi anche con il Visual Fox Pro, ma senza successo.
L'unico che riesce ad elaborare questi benedetti dati è il VO, però con una
lentezza mai vista, sia eseguendolo sul server stesso, che su una
postazione di lavoro (Win 95 o 98 che sia). 
Per quanto riguarda la Seek, di solito la uso in questo modo :
apro la mia tabella SQL
oSqlArc:=SQLSELECT{"select * from movco order by numero"}
oSqlArc:Execute()
quindi eseguo la Seek :
nNumero:=8967
oSqlArc:Seek(nNumero)
Pur essendoci nella tabella, non riesce a trovare il record.
Grazie per l'aiuto.


Purtroppo no.
La locate su una tabella SQL non funziona, ci ho già provato.
Grazie. Pierguido


Prova con:
oSqlArc := SQLSELECT{"select * from movco order by numero where numero =
8967"}
oSqlArc:Execute()
Avrai solo quello che ti interessa in tempi sicuramente accettabili.
Ciao

...


Scusate , ma gli oggetti sqlserver come si inzializzano? come indicato di
sotto ?
oSqlArc:=SQLSELECT{"select * from movco order by numero"}
oSqlArc:Execute()
oppure nel solito modo tipo i dbserver
Esempio:
LOCAL Odb as datab ( oggetto server  DBF definito nell'applicazione con le
sue brave caratteristiche )
Odb:=datab{}
o non ho capito
Sono veramente alla frutta.!
Ciao
Stefano

oSqlArc:Execute()
[a memoria]
Manca il secondo parametro della classe SQLSELECT che dovrebbe essere
una istanza di SQLCONNECTION.
Una connessione (lo dice il nome stesso) apre un canale di
comunicazione con ODBC attraverso il quale puoi eseguire Query SQL.
Antonello.