Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB6] Errore apparentente "disallow_zero_lenght"

    Sto trasferendo un archivio MSAccess in un database SQLServer, senza utilizzare il tool SSMA for Access.
    Tutto assolutamente OK ma, all'atto di trasferire il campo "PswDitta" appare il messaggio di errore allegato.
    Il bello è che il campo precedente ("Psw") ("Psw" è il ventiduesimo e "PswDitta" il ventitreesimo) viene trasferito correttamente.
    I 2 campi sono PERFETTAMENTI uguali. Ho controllato con estrema attenzione le caratteristiche dei 2 campi sia con Access (Strumenti database - Analizzatore database : AllowZeroLenght Vero) che con SSMS (sono entrambi nvarchar(8),Null - ma ho controllato anche la perfetta corrispondenza facendo click con il tasto destro su entrambi i campi). Sono uguali !
    L'unica differenza (oltrechè il loro contenuto) è che Psw è il penultimo della tabella mentre Psw è l'ultimo.
    Tutte le altre tabelle dell'archivio MDB sono trasferite correttamente, sempre utilizzando la medesima sub che qui, ahimè, fallisce.
    Ho anche fatto una preventiva compattazione dell'MDB utilizzando Access.
    Nessuno dei 2 campi è coinvolto in indici o altri diavolerie ma, ... niente !
    Il mio scopo finale è quello di trasferire ANCHE il campo PswDitta.
    Qualche suggerimento ?
    Grazie per l'attenzione
    codice:
    La sub che effettua i trasferimenti delle numerose tabelle è la seguente
    Sub LeggiTabella(NomeTabella)
       '--- leggo MSAccess e scrivo SQLServer
       Dim TuttiCampi          As String
       Dim i                   As Integer
       Dim Criterio            As String
       Dim strDate             As String
       Dim rs                  As ADODB.Recordset
       Dim strDelim            As String
       Dim S                   As String
       Dim TotCampi            As Integer
       'Dim Incremento          As Integer ' nion usato
       Dim V                   As Long
       Dim rsTot                  As ADODB.Recordset
       Dim Tot                 As Long
       Set rsTot = New ADODB.Recordset
       
       '
       Criterio = "SELECT COUNT(*) FROM " & NomeTabella
       rsTot.CursorLocation = adUseClient
       rsTot.Open Criterio, CnnSQL, adOpenForwardOnly, adLockReadOnly
       Tot = rsTot(0)
       rsTot.Close: Set rsTot = Nothing
       
         LbStato = LbStato & "Esamino " & NomeTabella & " (" & CStr(Tot) & " record)" & vbCrLf:   LbStato.Refresh
       DoEvents
       strDelim = "'"
       Set rs = New ADODB.Recordset
       
       cnnIMP.Execute "DELETE FROM " & NomeTabella
       rs.Open NomeTabella, cnnMDB, adOpenStatic, adLockOptimistic
       TuttiCampi = ""
       TotCampi = rs.Fields.Count - 1
       '===================================================================================== ATTENZIONE: SONO COSTRETTO A NON IMPORTARE PswDitta
       '''If NomeTabella = "TabPazienti" Then TotCampi = TotCampi - 1
    '==================================================================================================================================================
       
       For i = 0 To TotCampi
          TuttiCampi = TuttiCampi & "[" & rs.Fields(i).Name & "],"
       Next i
       TuttiCampi = Left(TuttiCampi, Len(TuttiCampi) - 1)
       Do
           Criterio = "INSERT INTO " & NomeTabella & "(" & TuttiCampi & ")"
           Criterio = Criterio & " VALUES("
           For i = 0 To TotCampi
               Select Case rs.Fields(i).Type
                   Case adVarWChar, adLongVarWChar, adChar, adVarChar
                       If Not IsNull(rs.Fields(i).value) Then
                           S = Replace(rs.Fields(i).value, "'", "''")
                           Criterio = Criterio & strDelim & S & strDelim & ","
                       Else
                           Criterio = Criterio & strDelim & strDelim & ","
                       End If
                   Case adDate
                       strDate = Format(rs.Fields(i).value, "dd/mm/yyyy HH:MM:SS")
                       Criterio = Criterio & strDelim & strDate & strDelim & ","
                   Case adBoolean
                      Select Case rs.Fields(i).value
                         Case "Falso", "False": Criterio = Criterio & "0,"
                         Case "Vero", "True": Criterio = Criterio & "1,"
                      End Select
                   Case adInteger, adDouble, adSingle, adInteger, adSmallInt, adCurrency, adUnsignedTinyInt
                      If Not IsNull(rs.Fields(i)) Then
                         V = rs.Fields(i).value
                         Criterio = Criterio & CStr(V) & ","
                      Else
                         Criterio = Criterio & "0,"
                      End If
                  Case Else
                      Debug.Print rs.Fields(i).Name
                      Debug.Print rs.Fields(i).Type
                      Stop
               End Select
           Next i
           Mid$(Criterio, Len(Criterio), 1) = ")"
           cnnIMP.Execute Criterio
           rs.MoveNext
       Loop Until rs.EOF
       rs.Close: Set rs = Nothing
        End Sub
    Immagini allegate Immagini allegate

  2. #2
    Piccolo errore:
    Ho scritto
    "è che Psw è il penultimo della tabella mentre Psw è l'ultimo."
    invece di
    "è che Psw è il penultimo della tabella mentre PswDitta è l'ultimo."

    Ho anche provato ad inserire nell'MDB un ventiquattresimo campo, pensando che il fatto di essere l'ultimo fosse un handicap per "PswDitta". Nessun risultato positivo.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.