Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con una connessione ADO a AS400

Ciao a tutti,
io lavoro in Visual Basic 6, MDAC 2.0, Windows xp.
Perchè quando faccio la prima query per contare i record mi dà il
numero 700 (che è giusto perchè ho controllato sull'AS400) mentre il
secondo recordset alla riga 230 mi va subito in eof quindi recordset
vuoto.
La cosa assurda è che in un'altra routine che c'è un codice simile
funziona tutto.
Qui sotto c'è il codice incriminato.
STO IMPAZZENDO....AIUTO...GRAZIE
50            conn.Open "Provider=IBMDA400;Data Source=" &
strNomeSistema & ";", strUtente, strPassword
60            Set cmdCount.ActiveConnection = conn
70            cmdCount.CommandText = "SELECT COUNT(HTPDOC) AS TOTREC" _
                                  & " FROM " & strLibreria &
".DBOTT00F" _
                                  & " WHERE HDTDOC <= " &
Format(dtpDataMaster.Value, "yyyymmdd") _
                                  & " AND HFLAG1 = 'S'" _
                                  & " AND HFLAG2 <> 'S'"
80            rsCount.CursorLocation = adUseServer
90            rsCount.Open cmdCount, , adOpenStatic,
adLockBatchOptimistic
100           Do While Not rsCount.EOF
110               lngRecord = rsCount!TotRec
120               rsCount.MoveNext
130           Loop
140           rsCount.Close
150           If lngRecord > 0 Then
160               msg = MsgBox("Numero di file che verranno eliminati:
" & lngRecord & vbCrLf & " Si desidera proseguire con la
cancellazione?", vbYesNo + vbQuestion, MSG1)
170               If msg = vbYes Then
180                   ProgressBar1.Min = 0
190                   ProgressBar1.Max = lngRecord
200                   Set cmd.ActiveConnection = conn
210                   cmd.CommandText = "SELECT *" _
                                     & " FROM " & strLibreria &
".DBOTT00F" _
                                     & " WHERE HDTDOC <= " &
Format(dtpDataMaster.Value, "yyyymmdd") _
                                     & " AND HFLAG1 = 'S'" _
                                     & " AND HFLAG2 <>'S'"
220                   rs.CursorLocation = adUseServer
230                   rs.Open cmd, , adOpenStatic,
adLockBatchOptimistic
240                   lblInfo = "Cancellazione dei File in corso..."
255                   Do While Not rs.EOF



 255                   Do While Not rs.EOF
L'unico problema che vedo è che il recordset non è statico, anzi, è 
addirittura lato server, per cui stai lavorando su una vista.
Come prima cosa, io farei un
245 If not rs.BOF=true and rs.EOF=true then rs.movefirst
prima del Do While della 255
Secondo, non so cosa tu faccia dopo la riga 255.
Ma questo ti farebbe dei casini se tu iniziassi a fare dei Delete o 
degli Update all'interno del loop, mentre il tuo problema sussiste fin 
dall'Open iniziale.
Per adesso, proviamo con MoveFirst, poi vediamo.
Ciao
Alberto
-- 
Si è visto di meglio,
ma si è scopato di peggio,
qualche volta a pago
e non erano neanche sempre donne
[Paolo]

 dall'Open iniziale.
No non ti preoccupare già provveduto.


 inpratica mi dice che non ci sono record all'interno del recordset.
Infatti io avevo messo un If per evitare l'errore.
L'unica cosa che mi viene da pensare, è che sul client sia installato 
un Client Access vecchio.
C'erano parecchi problemi di incompatibilità fra il provider ODBC di 
Client Access e MDAC, finchè IBM non ha deciso di fare le cose fatte 
meglio.
Il che è successo, se ricordo bene, tre anni fa.
Non chiedermi però che versione di Client Access risolve i problemi. 
Trattandosi di problematiche abbastanza note a chi lavora nel mondo DB2 
su AS400, prova a chiedere a un NG specifico su IBM.
Oppure, a brutto grugno, installa un Client Access più recente.


Per favore posta tutto il codice, compresa la stringa di connessione!
Cmq il mio consiglio è quello di installare iSeries Access for Windows 
ultima versione + SP
Io lavoro su un archivio con qualche milione di record e non ho nessun 
problema.
Ciao, Vincenzo