Newsgroup: it.comp.lang.visual-basic
Titolo: ADO-OLE DB-SYBASE

Ciao a tutti.
Ho un problemino che da un paio di giorni mi trovo sempre davanti...
Sto provando Sybase SQL Anywhere 7.0 ( e piano piano altri RDBMS) per
sostituire un file Access97 che oramai ha fatto il suo dovere.
Il mio test essenzialmente consiste nel ricreare sul Db in questione la
stessa struttura (+ o -) del file Access,  popolare il Db con i dati e poi
accedere allo stesso con un programma VB6 modificato allo scopo.
Per popolare il DB ho creato un programma che da VB6 con ADO2.5 ed i driver
OLE DB specifici copia record per record da Access a Sybase, così escono
allo scoperto incompatibilità, problemini vari etc.
Praticamente:
1.connessione a Sybase - OK
2.connessione ad Access -OK
3. leggo la tabella di Access - OK
4. per ogni record della tabella creo un record nuovo in Sybase popolando i
campi corrispondenti......
Sybaserecordset.cursorlocation=aduseserver
Sybaserecordset.cursortype=adDynamic
AccessRecordset.movefirst
do while not AccessRecordset.EOF
     SybaseRecordset.AddNew
            SybaseRecordset.fields("xxx")=Access.fields("xxx")
            ..................
            ..................
    SybaseRecordset.updatebatch ----->e qui nasce il problema!!
loop
Non riesco in nessuna maniera a passare il valore Access dbBoolean=true al
corrispondente Sybase bit=1 (e nemmeno ad impostare un valore Null in Sybase
a dire il vero..)
La cosa strana è che:
Sybase.field("xxx").type=11
come
Access.field("xxx").type=11
praticamente non sono riuscito a inserire ad un campo bit di Sybase nulla
all'infuori di
Sybase.field("xxx")=0
Ogni tentativo di passare un valore diverso da 0 si risolve in un errore del
provider OLEDB (err.source=ASA OLE BD)
(Ogni tentativo di passare un valore NULL si risolve in un crash di VB6!!!!)
Spero di essermi spiegato....
Se avete qualche idea in proposito...... certo posso aggirare il problema,
con una
Sybaseconnection.execute "Insert into <sybaseTable> (xxx) values (1)"
riesco ad inserire i dati voluti però....... è molto più incasinato anche
perchè non ho molti record però ho un sacco di campi....
Grazie intanto
Saluti                         Sergio (
Ba...@gmx.it
)

a dire il vero..)
True e' Boolean (32 bit) ed in vb vale -1 mentre un campo bit puo' essere
1 o 0, quindi ti sara' opportuno fare una conversione in occasione dei campi 
Boolean
Riguardo al Null, credo che sia un problema di ADO. Se copi il valore
di un campo in un altro ed il campo origine contiene Null allora ado
genera un idiota messaggio d' errore (del tipo: "an error occurred"),
mentre se assegni direttamente il valoe Null al campo allora tutto ok.
Quindi ti tocchera' aggiungere un test:
    If (IsNull(SybaseRecordset.fields("xxx").value) ) Then
        SybaseRecordset.fields("xxx")=Null
    Else
        SybaseRecordset.fields("xxx")=Access.fields("xxx")
    End If
Ciao
Aldo

 Saluti                         Sergio (
Ba...@gmx.it
)
Ciao
Sir Jo

 Esistono dei demo/trial o cose del genere ??
Esiste una trial a 60 giorni scaricabile dal loro sito (
www.sybase.com
) ed è
quella che uso io.
Non mi risulta abbia limitazioni di sorta ..... per il prezzo posso solo
darti le cifre che ho trovato su 
www.pparadise.it
 , licenza workgroup base +
5 user 2.200K ma immagino la casistica sia ampia...
Ok devo andare , grazie per le dritte che sperimenterò nel weekend (  ....
tristezza....)  e poi vi farò sapere come ho risolto il mio problema di ieri
Saluti
    Sergio