Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303

    [VB.NET]Istruzione Sql Insert to

    allora uso questo codice che mi và in errore per inserire dei record in una tabella "REP" in mdb da una tabella .sdf

    codice:
    Dim conn1 As New OleDbConnection(ConnString)
    						conn1.Open()
    						Dim sql1 As String = "INSERT INTO REP SELECT * FROM Conto.Bancomat WHERE Data  >= '" & datainizio & "' AND Data<= '" & datafine & "' AND Tipo = '" & "Bancomat" & "'"
    						Dim cmd1 As New OleDbCommand(sql1, conn1)
    						cmd1.ExecuteNonQuery()
    						conn1.Close()
    l' errore è "Tipi di dati non corrispondenti nell' espressione di criterio" perchè?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Intanto non capisco perche' non scrivi

    ... & "' AND Tipo = 'Bancomat' "


    dato che la parola Bancomat e' costante ...

    L'errore invece, probabilmente, e' causato dal contenuto delle due variabili ...

    In questi casi, esegui una MsgBox della stringa sql1 e indica cosa viene visualizzato ...

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Ma perché non usare i parametri risolvendo in un solo colpo tutti i problemi di questo tipo, ottimizzando le performance, mettendo "in sicurezza" il software da SQL Injection, eliminando i difetti dovuti alle impostazioni internazionali, astraendosi dalle differenze sottili che vi sono tra i vari DB e le varie piattaforme di accesso ai dati (e altro ancora...)?

    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da alka
    Ma perché non usare i parametri risolvendo in un solo colpo tutti i problemi di questo tipo, ottimizzando le performance, mettendo "in sicurezza" il software da SQL Injection, eliminando i difetti dovuti alle impostazioni internazionali, astraendosi dalle differenze sottili che vi sono tra i vari DB e le varie piattaforme di accesso ai dati (e altro ancora...)?

    Non posso che essere d'accordo ...

  5. #5
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    Originariamente inviato da oregon
    Intanto non capisco perche' non scrivi

    ... & "' AND Tipo = 'Bancomat' "


    dato che la parola Bancomat e' costante ...

    L'errore invece, probabilmente, e' causato dal contenuto delle due variabili ...

    In questi casi, esegui una MsgBox della stringa sql1 e indica cosa viene visualizzato ...
    ciao oregon,
    mi viene resituito:

    codice:
    INSERT INTO REP SELECT * FROM Conto.Bancomat WHERE Data >= '"2007/06/13' AND Data >= '"2007/10/13' AND Tipo = 'Bancomat'

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Ecco qui di seguito un esempio ritagliato sul caso citato, con l'uso dei parametri.

    codice:
            ' Crea l'oggetto che implementa la connessione
            Dim Conn As New OleDbConnection(ConnString)
    
            ' Apre la connessione
            Conn.Open()
            Try
                ' Definisce lo statement SQL da eseguire
                Dim Sql As String = "INSERT INTO REP SELECT * FROM Conto.Bancomat WHERE Data  >= ? AND Data <= ? AND Tipo = ?"
    
                ' Crea un nuovo comando
                Dim Cmd As New OleDbCommand(Sql, Conn)
    
                ' Definisce il parametro "data di inizio"
                Dim ParDataInizio As New OleDbParameter("DataInizio", OleDbType.Date)
                ParDataInizio.Value = DataInizio
                Cmd.Parameters.Add(ParDataInizio)
    
                ' Definisce il parametro "data di fine"
                Dim ParDataFine As New OleDbParameter("DataFine", OleDbType.Date)
                ParDataFine.Value = DataFine
                Cmd.Parameters.Add(ParDataFine)
    
                ' Definisce il parametro "tipo"
                Dim ParTipo As New OleDbParameter("Tipo", OleDbType.VarChar)
                ParTipo.Value = Tipo
                Cmd.Parameters.Add(ParTipo)
    
                ' Esegue lo statement SQL
                Cmd.ExecuteNonQuery()
    
            Finally
    
                ' Chiude la connessione ai dati
                Conn.Close()
    
            End Try
    Non ho ovviamente verificato il funzionamento, poiché sono sprovvisto di database, tabelle e "know how" del problema specifico esaminato, ma l'esempio dovrebbe essere sufficiente a dare un idea dell'uso dei parametri.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da x69asterix
    ciao oregon,
    mi viene resituito:

    codice:
    INSERT INTO REP SELECT * FROM Conto.Bancomat WHERE Data >= '"2007/06/13' AND Data >= '"2007/10/13' AND Tipo = 'Bancomat'
    Non credo che ci sia un apice e un doppio apice qui

    '"2007/10/13'

    .... e comunque potrebbe essere il formato della data che e' yyyy/mm/dd e dovrebbe essere un altro ...

    Comunque, segui il consiglio di alka ...

  8. #8
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    Originariamente inviato da alka
    Ecco qui di seguito un esempio ritagliato sul caso citato, con l'uso dei parametri.

    codice:
            ' Crea l'oggetto che implementa la connessione
            Dim Conn As New OleDbConnection(ConnString)
    
            ' Apre la connessione
            Conn.Open()
            Try
                ' Definisce lo statement SQL da eseguire
                Dim Sql As String = "INSERT INTO REP SELECT * FROM Conto.Bancomat WHERE Data  >= ? AND Data <= ? AND Tipo = ?"
    
                ' Crea un nuovo comando
                Dim Cmd As New OleDbCommand(Sql, Conn)
    
                ' Definisce il parametro "data di inizio"
                Dim ParDataInizio As New OleDbParameter("DataInizio", OleDbType.Date)
                ParDataInizio.Value = DataInizio
                Cmd.Parameters.Add(ParDataInizio)
    
                ' Definisce il parametro "data di fine"
                Dim ParDataFine As New OleDbParameter("DataFine", OleDbType.Date)
                ParDataFine.Value = DataFine
                Cmd.Parameters.Add(ParDataFine)
    
                ' Definisce il parametro "tipo"
                Dim ParTipo As New OleDbParameter("Tipo", OleDbType.VarChar)
                ParTipo.Value = Tipo
                Cmd.Parameters.Add(ParTipo)
    
                ' Esegue lo statement SQL
                Cmd.ExecuteNonQuery()
    
            Finally
    
                ' Chiude la connessione ai dati
                Conn.Close()
    
            End Try
    Non ho ovviamente verificato il funzionamento, poiché sono sprovvisto di database, tabelle e "know how" del problema specifico esaminato, ma l'esempio dovrebbe essere sufficiente a dare un idea dell'uso dei parametri.
    molte grazie,
    da qui prenderò spunto per le prossime volte

  9. #9
    Utente di HTML.it L'avatar di x69asterix
    Registrato dal
    Jan 2005
    Messaggi
    1,303
    scusate se riapro il post, ma all'inizio io ho specificato:

    allora uso questo codice che mi và in errore per inserire dei record in una tabella "REP" in mdb da una tabella .sdf
    ma sbaglio io ho il codice non si adatta a quanto descritto?

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da x69asterix
    scusate se riapro il post, ma all'inizio io ho specificato:

    allora uso questo codice che mi và in errore per inserire dei record in una tabella "REP" in mdb da una tabella .sdf
    ma sbaglio io ho il codice non si adatta a quanto descritto?
    Non lo so... l'hai provato? Ottieni un effetto diverso da quello desiderato? I riferimenti a tabelle e campi sono giuste? Ottieni errori? Eccezioni? Compila?

    Purtroppo, non poni un problema, ma ogni volta chiedi che siano gli altri a collaudare il codice per riscontrare il problema stesso, facendo la diagnostica oltreché a proporre un'eventuale soluzione, ma la codifica è ovviamente un compito esclusivamente tuo, poi se non ottieni i risultati sperati o incontri un problema, è lì che il forum può tornare utile per individuarne la causa.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.