Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: errore di sintassi

  1. #1

    errore di sintassi

    Errore di sintassi come riportato di seguito.
    sarà una questione di apici?


    Sub salva_record(nrOld, nrNew)
    Dim msg
    Dim j
    'nrOld = numero di riga precedente
    'nrNew = numero di riga corrente
    'VSF3 = Griglia
    'data1 = controllo ADODC

    'salvataggio del record nrOld nel file MDB
    data1.Recordset.Close

    msg = "SELECT * FROM datiInput WHERE (Numero = " & Str(nrOld) & ")"
    data1.Recordset.Open msg ' ERRORE di run-time '-2147217900 (80040e14)':
    ' Errore di sintassi nella proposizione FROM

    VSF3.row = nrOld
    For j = 1 To VSF3.Cols
    VSF3.Col = j
    data1.Recordset.Fields("" + fieldsName(j) + "") = VSF3.Text
    Next j
    data1.Recordset.Update

    'rimette il numero di riga corretto
    VSF3.row = nrNew
    End Sub

  2. #2
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Basta che leggi la guida su Str e capisci il perchè.

    Infatti, se prima di eseguire la query fai così:
    codice:
    msgbox Len(msg)
    ti accorgi che la lunghezza della stringa non corrisponde.

    In ogni caso, non devi fare alcuna conversione in stringa perchè è sufficiente la concatenzione.
    Non servono nemmeno le parentesi (a meno che tu non debba concatenare in sequenza più condizioni OR o AND. Vedrai infatti che così funziona:

    codice:
    msg = "SELECT * FROM datiInput WHERE Numero = " & nrOld
    Ciao

  3. #3
    mi dispiace, ma il messaggio d'errore è lo stesso.

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ma sicuro che il numero sia esatto?

  5. #5
    si, sono sicuro. se apro con access c'è.

  6. #6
    sto provando a saltare
    close
    open
    e andare direttamente ad update
    (dovrebbe funzionare?)
    ma anche qui c'è qualcosa che si inceppa.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    760
    datiInput cos'è? E' il nome di una tabella o è una variabile?

    Non c'entra niente se un record con quel numero esiste o non esiste, l'importante è che il campo Numero sia di tipo numerico e che la tabella si chiami datiInput.

  8. #8
    datiInput è il nome della tabella.

    Nel secondo modo mi pare che va bene; cioè semplicemente con l'update.

    Mi dava problemi quando il valore in una cella è vuoto o "0": io sto evitando questi casi con una IF e tutto procede bene, ma non è corretto perchè nel caso di nuovo record mi sta pure bene, ma nel caso di update mi rimane il valore esistente in archivio.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ho capito molto poco di questo thread ...

    Parli di un errore di sintassi in una SELECT ... poi fai riferimento ad una UPDATE e ad una INSERT ...

    Mostra il codice *attuale* che esegui ... e indica *quale* errore e in quale *linea* si verifica ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    a poco alla volta si è un poco incasinato.
    Mi spiego
    La sub serviva per salvare una riga di griglia che corrisponde ad un record della tabella "DatiInput". Vale sia per modifica di record esistente in archivio, che per nuovo record.

    Per questo motivo ritenevo (a torto o a ragione) che ci volesse una select per individuare il record in archivio e poi la sostituzione dei campi.
    In questo caso usavo

    msg = "SELECT * FROM datiInput WHERE Numero = " & nrOld
    data1.Recordset.Open msg ' ERRORE di run-time '-2147217900 (80040e14)':
    ' Errore di sintassi nella proposizione FROM
    senza riuscire a passare alla seconda parte di scrittura.


    Visto che non riuscivo a trovare l'errore ho utilizzato solo la seconda parte
    (ossia quella di scrittura)

    VSF3.row = nrOld
    For j = 0 To VSF3.Cols - 1
    VSF3.Col = j
    If Val(VSF3.Text) <> 0 Then data1.Recordset.Fields(fieldsName(j)) = VSF3.Text
    Next j
    data1.Recordset.Update

    che mi va bene anche senza usare la prima parte.

    A questo punto però sorge il problema che la condizione IF mi fa escludere i campi che dovrebbero diventare "0" o Null e rimangono così com'erano prima della modifica.

    Ora credo sia chiaro.
    Voi, che certamente siete più bravi di me, quale soluzione mi consigliate per questo problema?

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.