Newsgroup: it.comp.lang.vo-clipper
Titolo: Fieldput di SqlSelect non funzia

SQLConnectErrorMsg(TRUE)
   cConnectString := "Driver=MySQL ODBC 3.51 
Driver;Server="+NomeServer+";UID="+cUser+";PWD="+cPassword
   oConn := SqlConnection{}
   cConnectString := cConnectString +";Database=Db_wPlus3"
   SELF:ControllaConnessione(oConn:DriverConnect(, SQL_DRIVER_NOPROMPT, 
cConnectString))
   PercorsoDbf := "c:\wPlus3\Db\"
   aDir := Directory(PercorsoDbf + "*.dbf")
   oWin := Attesa{SELF}
   oWin:Show(ShowCentered)
   ApplicationExec(ExecWhileEvent)
   oWin:oDcMessaggio:Font := Font{FONTROMAN10}
   FOR B := 1 TO ALen(aDir)
    oSrv := DbServer{PercorsoDbf + aDir[B][1],TRUE,FALSE}
    oSelect := SqlSelect{"select * from " + Left(Lower(AllTrim(aDir[B][1])), 
Len(Lower(AllTrim(aDir[B][1]))) - 4) + " limit 1", oConn}
    oWin:oDcMessaggio:CurrentText := "Conversione di " + AllTrim(aDir[B][1]) 
+ " in corso..."
    DO WHILE !oSrv:EoF
     IF !oSelect:Append()
      cError := "Non sono riuscito ad aggiungere il record"
      BREAK
     ENDIF
     FOR I := 1 TO oSrv:FCount
      uValue := oSrv:FIELDGET(I)
      oSelect:FIELDPUT(I,uValue)
      IF oSelect:FIELDGET(I) <> uValue
       cError := "Dati non congruenti"
       BREAK
      ENDIF
     NEXT
     oSelect:AppendRow()
     oSrv:Skip()
    END DO
    oSelect:Commit()
    oSelect:Close()
    oSrv:Close()
   NEXT
.........
Ciao a tutti,
questa procedura mi popola i db creati in mysql prendendo i dati 
direttamente dai dbf.
Il problema che mi si presenta è questo: ogni volta che faccio il fieldput 
mi assegna il primo carattere anzichè l'intera stringa, non riesco a capire 
se è un problema mio o altro.
Aiutatemi per favore!!!
Ciao
Massimo Friargiu 

Ciao Massimo,
non sono un esperto di Mysql ma isto che non ti ha risposto
nessuno provo a dare una mia opinione...
vedo in questa sezione in cui esegui la select che hai aggiunto
-> limit 1
se non ricordo male questo implica la limitazione ad un record
il dubbio è che gli append successivi e le relative fieldput()
non funzionino bene con questo parametro..
ripeto però non sono un esperto
saluti a tutti
andrea


Attenzione Massimo, per me è un problema di approccio.
Se decidi di utilizzare un database relazionale devi cambiare modalità di 
lavoro ed utilizzare appieno le potenzialità che questo ambiente ti offre 
ovvero usare i comando sql (insert, update, delete etc..) ed abbandonare la 
modalità di lavoro dei DBF, nel tuo caso:
apri il dbf,
do while !eof
    costruisci una stringa che corrisponde al comando insert e poi esegui 
questo comando
    skip
enddo
costruzione del comando
cCommand := "insert into "+cTabella+" set "
for n := 1 upto dbsever:fcount
    if dbserver:FieldInfo(DBS_TYPE,n ) ="C"
        cCommand += dbserver:fieldname(n)+[="]+dbserver:fieldget(n)+["]
    elseif  dbserver:FieldInfo(DBS_TYPE,n ) ="N"
        cCommand += dbserver:fieldname(n)+[=]+ntrim(dbserver:fieldget(n))
    elseif ------
        etc...
    endif
    if n < dbsever:fcount
        cCommand += ","
    endif
next
    esegui la query
così è più veloce, non solo puoi unire più righe in un unico comando, 
diciamo a blocchi di 10 o 20 velocizzando ancora di più l'operazione
Danilo Giuliani

 ha scritto nel messaggio 
news:44a21d60$0$3113$4faf...@reader1.news.tin.it...


Ok funziona tutto, l'importazione avviene correttamente.
L'unica cosa che mi fa pensare è questa, tu hai detto che devo cambiare 
modalità di lavoro e quindi passare dalla mentalità dbf ai db relazionali, 
ma perchè se io passo alla finestra il server, v.o. usa il sistema classico 
con i fieldget e put e quì funziona tutto correttamente ?