Newsgroup: it.comp.lang.visual-basic
Titolo: [ADO] Problema inserimento DB Access

Ciao a tutti.
Il mio problema è il seguente :
Ciclo su un file che contiene righe da inserire in una tabella di un db
access2000.
Tale tabella ha chiave primaria.
Nel file possono esserci righe con chiave duplicata.
In questo caso la prima riga va inserita, le altre no.
All'interno del ciclo, riga per riga cerco se esiste la chiave primaria :
in caso affermativo 'salto' l'inserimento,altrimenti inserisco.
grandi linee (non ho il codice sottomano)
for i = lbound(filelines) to ubound(filelines)
   if not findprimarykey(filelines(i)) then
     insertline(filelines(i))
   end if
next i
Mi capita questo :
se ho appena inserito nella tabella un record e il successivo è duplicato,
la funzione che cerca la chiave primaria non me lo trova !!!!!!!!!!
Se invece metto un delay la stessa funzione FUNZIONA !!!!
Cosa posso fare secondo voi ?
E' un problema di access2000 o mio ?
P.S.
Nella funzione findprimarykey ho usato sia gli oggetti command che
recordset che sql dirette (connessioneADO.execute ...)
Il database si trova su un server su una rete a 10Mb.
Spero di essere stato chiaro
Grazie
Franco
-- 
Inviato il mar 21 ago 2001 10:52:17 CEST da 62.110.32.33 [62.110.32.33]
http://www.neuromante.net/

perchè non "tenti" comunque l'inserimento proteggendoti con un bel On Error
Resume Next?
se il record esiste già, non succede niente (l'errore viene ignorato),
altrimenti viene inserito. Voilà.


Direi che il problema potrebbe essere di refresh dei recordset della
ricerca...
Che tipo di cursore usi?
Postaci un po' di codice
ciao
ugo
p.s. non è che hai transazioni aperte ?

...

Perchè se il record è doppio (come chiave primaria) può avere comunque
infomazioni diverse rispetto agli altri record, quindi devo inserirlo in
un' altra tabella !!
Grazie per la risposta
Ciao
Franco
-- 
Inviato il mar 21 ago 2001 15:26:10 CEST da 62.110.32.33 [62.110.32.33]
http://www.neuromante.net/

...

Attualmente il codice della funzione è del tipo :
''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim myCmd As ADODB.Command
Dim mySQL As String
Dim myRs As ADODB.Recordset
 
On Error GoTo Errore
 
    mySQL = "SELECT <Codice> FROM <NomeTabella> WHERE <Condizioni> ..."
    Set myCmd = New ADODB.Command
    myCmd.CommandType = adCmdText
    myCmd.CommandText = mySQL
    'cn è la connessione ADO globale
    Set myCmd.ActiveConnection = cn
    Set myRs = myCmd.Execute
    If myRs.EOF Then
        <NomeFunzione> = False
    Else
        <NomeFunzione> = True
    End If
 
    Set myCmd = Nothing
    Set myRs = Nothing
''''''''''''''''''''''''''''''''''''''''''''''''''''
Ps.
Non sto usando transazioni
Grazie
Ciao
Franco
-- 
Inviato il mar 21 ago 2001 15:33:41 CEST da 62.110.32.33 [62.110.32.33]
http://www.neuromante.net/

     If myRs.EOF Then
Eccotelo!
Direi che in questo caso è d'uopo portarte la cursorlocation sul client e
testare direttamente la RecordCount
Inoltre, personalmente, voterei per una semplificazione tipo:
Dim mySQL As String
Dim myRs As ADODB.Recordset
On Error GoTo Errore
mySQL = "SELECT <Codice> FROM <NomeTabella> WHERE <Condizioni> ..."
with myRs
    .Cursorlocation = aduseclient
    .Open, mySql, cn, adopenstatic, adLockreadonly
    if .recordcount = 0 then
        <NomeFunzione> = False
    else
        <NomeFunzione> = true
    endif
    .close
end with
Set myRs = Nothing
Dato che non vedo ragione per usare un Command ove non serve eseguire delle
azioni e/o chiamare una SP.
ciao
ugo

 ha scritto nel messaggio
news:9ltp66$b6s$1...@lacerta.tiscalinet.it...

Cazzpiterina !!!!
Scusa per il ritardo ma questo post non c'era sul server che usavo !!!!
La provo subito !!!!!
GRAZIE
Ciao
Franco