Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Ho scomodato, oh se l'ho scomodato, Google ! Ma forse non ho saputo cercare bene.
    Per semplificare le cose ho utilizzato una tabella con due campi (ID e Nome) e chiave primaria ID. Stesso errore.
    Non ho però capito due cose :
    - fai riferimento ad un disconnessione
    - fai riferimento ad un SELECT; io non utilizzo questa istruzione.
    Qui sotto riporto il contenuto del file XML creato
    <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    - <s:Schema id="RowsetSchema">
    - <s:ElementType name="row" content="eltOnly" rs:updatable="true">
    - <s:AttributeType name="ID" rs:number="1" rs:write="true">
    <s:datatype dt:type="int" dt:maxLength="4" rsrecision="0" rs:fixedlength="true" rs:maybenull="false" />
    </s:AttributeType>
    - <s:AttributeType name="Nome" rs:number="2" rs:nullable="true" rs:maydefer="true" rs:write="true" rs:writeunknown="true">
    <s:datatype dt:type="string" dt:maxLength="50" rsrecision="0" />
    </s:AttributeType>
    <s:extends type="rs:rowbase" />
    </s:ElementType>
    </s:Schema>
    - <rs:data>
    - <rs:insert>
    <z:row ID="2" Nome="RECORD AGGIUNTO AUTOMATIC" />
    </rs:insert>
    </rs:data>
    </xml>
    Ricapitolando
    codice:
     Dim rsD As ADODB.Recordset
     Set rsD = New ADODB.Recordset
     If rsD.State = adStateOpen Then rsD.Close
     Set rsD.ActiveConnection = Nothing 
     rsD.Fields.Append "ID", 3, 4, adFldKeyColumn
     rsD.Fields.Append "Nome", 202, 50, 106
     rsD.Open
     rsD.AddNew
     rsD("ID") = IDEff
     rsD("Nome") = "RECORD AGGIUNTO AUTOMATIC"
     rsD.Save stm, adPersistXML
     stm.SaveToFile FileRemoto, adSaveCreateOverWrite ' debug
      xml.Open "POST", WebHost & "UpdateMioTaccuino.asp", False
     xml.send stm.ReadText
     If xml.responseText <> "" Then
             MsgBox Right(xml.responseText, Len(xml.responseText) - InStr(xml.responseText, vbCrLf) - 1), vbCritical, Left(xml.responseText, InStr(xml.responseText, vbCrLf) - 1)
     End If
    Purtroppo non so se l'errore avviene lato VB o lato ASP. Capire questa cosa sarebbe già un passo notevole.
    Ultima modifica di giustavalla; 08-02-2014 a 11:10

  2. #12
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    ...
    Non ho però capito due cose :
    - fai riferimento ad un disconnessione
    - fai riferimento ad un SELECT; io non utilizzo questa istruzione.
    questo è l'xml che mi genera leggendo i dati da una tabella con una pk di un db access

    ...nota che ci sono rs:basetable , rs:basecolumn e rs:keycolumn="true" che mancano nel tuo ...


    codice:
    - <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    - <s:Schema id="RowsetSchema">
    - <s:ElementType name="row" content="eltOnly" rs:updatable="true">
    - <s:AttributeType name="K1" rs:number="1" rs:nullable="true" rs:maydefer="true" rs:writeunknown="true" rs:basetable="T1" rs:basecolumn="K1" rs:keycolumn="true">
      <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" /> 
      </s:AttributeType>
    - <s:AttributeType name="F2" rs:number="2" rs:nullable="true" rs:maydefer="true" rs:writeunknown="true" rs:basetable="T1" rs:basecolumn="F2">
      <s:datatype dt:type="int" dt:maxLength="4" rs:precision="10" rs:fixedlength="true" /> 
      </s:AttributeType>
      <s:extends type="rs:rowbase" /> 
      </s:ElementType>
      </s:Schema>
    - <rs:data>
      <z:row K1="0" F2="100" /> 
      </rs:data>
      </xml>
    questo il codice usato :
    codice:
      Dim rs1 As New Recordset
      Dim cn As New Connection
      
      cn.CursorLocation = adUseClient
    
    
      cn.Open "FILE NAME=c:\temp\FileUDL.udl"
      
      On Error Resume Next
      cn.Execute "Drop Table T1"
         cn.Execute "CREATE TABLE T1 (K1 Int PRIMARY KEY, F2 Int)"
      On Error GoTo 0
      
      cn.Execute "INSERT INTO T1 VALUES(0, 100)"
      
      rs1.Open "Select K1, F2 From T1", cn, adOpenKeyset, adLockOptimistic
      
      If Dir("c:\temp\Persist.xml") <> "" Then Kill "c:\temp\Persist.xml"
      rs1.Save "c:\temp\Persist.xml", adPersistXML
    EDIT

    aggiungo anche che questo codice mi funziona in locale (non ho tempo di provare con la pagina asp ora)
    codice:
      rs2.Open "c:\temp\Persist.xml", cn, adOpenKeyset, adLockBatchOptimistic, adCmdFile
    
    
      rs2.AddNew
      rs2("K1") = 1
      rs2("F2") = "200"
      rs2.UpdateBatch
    Ultima modifica di sspintux; 08-02-2014 a 12:46 Motivo: aggiunta

  3. #13
    In locale funziona ma sul web, interagendo con la pagina ASP ... no
    Vorrei chiarire che in locale (ossia sul PC) non c'è alcun database. O meglio c'è un recordset disconnesso (ammesso che sia necessario).
    C'è viceversa un database MDB sul web ed è proprio con lui che la pagina ASP ed il codice VB6 dovrebbe interagire.
    Grazie delle ulteriori informazioni, ma per il momento ... le idee sono poche e ben confuse.
    Ultima modifica di giustavalla; 08-02-2014 a 15:35

  4. #14
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    0
    Vorrei chiarire che in locale (ossia sul PC) non c'è alcun database. O meglio c'è un recordset disconnesso (ammesso che sia necessario).
    ... allora non credo ci sia la possibilità di usare l'updatebatch ( a meno di costruirsi a mano l'xml come te l'ho mostrato)
    perchè le properties di un adodb.field sono impostate dal provider di dati e non sono modificabili;

    ma ciò non toglie che lato asp possa implementare tu stesso "a manina" quello che farebbe l'updatebatch ...

  5. #15
    Quanto mi dici va al di là delle mie capacità. Costruire a mano un XML sarebbe anche possibile ma, con il fatto che non si sa se gli errori sono dal lato AS o VB6, la vedo assai dura.
    Bisognerebbe avere un esempio di XML funzionante; è su questa linea che intendo muovermi adesso.
    Il mio post iniziava con un "nel web suno numerosi gli esempi di aggiornamento di un recordset tramite VB6 e ASP". Possibile che non ci sia un esempio di tale tecnica, con un AddNEw ?
    Grazie ancora.

  6. #16
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    Quanto mi dici va al di là delle mie capacità. Costruire a mano un XML sarebbe anche possibile ma, con il fatto che non si sa se gli errori sono dal lato AS o VB6, la vedo assai dura.
    Bisognerebbe avere un esempio di XML funzionante; è su questa linea che intendo muovermi adesso.
    Il mio post iniziava con un "nel web suno numerosi gli esempi di aggiornamento di un recordset tramite VB6 e ASP". Possibile che non ci sia un esempio di tale tecnica, con un AddNEw ?
    Grazie ancora.
    mi permetto di fare un riepilogo ... correggimi se sbaglio :

    1) hai dei dati su un client che non sono memorizzati su un db;

    2) sempre lato client,riesci a memorizzare questi dati su di un recordset disconnesso
    e ad inviarli ad una pagina asp

    3) lato asp riesci anche a ricostruirti il recordset ma non ad usare l'updatebatch che hai trovato negli esempi per inviare le modifiche al db
    EDIT
    (
    ... e mai ci riuscirai in modo semplice non avendo un db lato client proprio perché
    ,come recita l'errore che ricevi, la rappresentazione xml del recordset
    non contiene le informazioni necessarie per l'aggiornamento della base dati
    ... quale campo di quale tabella con quale pk '???
    )

    In queste ipotesi ti consiglio di lasciar stare la costruzione del xml di cui parli
    ed al solo scopo di poter usare l'updatebatch
    ed usare invece un adodb.command per aggiungere/modificare/cancellare
    i records leggendo i dati dal recorset che ti sei ricostruito
    Ultima modifica di sspintux; 08-02-2014 a 18:13

  7. #17
    Effettivamente ho dei dati di un mio programma (sviluppato in VB6) che vorrei trasferire nel web; i dati non sono memorizzati su un db.
    Il tuo suggerimento (usare ADODB.Command) è stato risolutivo.
    Dapprima mi sono costruito una istruzione SQL del tipo
    INSERT INTO TabEff VALUES(8815,101361,1182,#2014-02-09#,'tempo bello','1','dettagli in quot ……

    Poi ho richiamato la pagina ASP
    codice:
    On Error Resume Next
       rs.CursorType = adOpenKeyset
       rs.LockType = adLockBatchOptimistic
       rs.CursorLocation = adUseClient
       rs.Open WebHost & "InsertMT.asp?Query=" & Criterio
       rs.Close
       Set rs = Nothing
    nella quale ho inserito un oggetto (si dice cosi ?) ADODB.Command.
    Due soli veniali inconvenienti, ma per il resto è tutto OK. Essi sono :

    1. Se non inserisco un “On Error Resume Next” va in errore la linea rs.Open WebHost & "InsertMT.asp?Query=" & Criterio
    2. L’istruzione SQL (la query) non può essere più lunga di 2000 caratteri circa per cui non è possibile inserire molti dati; mi dispiace ma non penso si possa fare niente.
    3. Nella query bisogna sostituire il carattere # con un altro carattere (ad esempio |) in quando il # non passa; un doppio replace (lato VB e lato ASP) e tutto è OK.
    4. Lo stesso succede per il carattere asterisco; un banale replace ovvia al tutto.

    Grazie di cuore !

  8. #18
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    Effettivamente ho dei dati di un mio programma (sviluppato in VB6) che vorrei trasferire nel web; i dati non sono memorizzati su un db.
    Il tuo suggerimento (usare ADODB.Command) è stato risolutivo.
    Dapprima mi sono costruito una istruzione SQL del tipo
    INSERT INTO TabEff VALUES(8815,101361,1182,#2014-02-09#,'tempo bello','1','dettagli in quot ……

    Poi ho richiamato la pagina ASP
    codice:
    On Error Resume Next
       rs.CursorType = adOpenKeyset
       rs.LockType = adLockBatchOptimistic
       rs.CursorLocation = adUseClient
       rs.Open WebHost & "InsertMT.asp?Query=" & Criterio
       rs.Close
       Set rs = Nothing
    nella quale ho inserito un oggetto (si dice cosi ?) ADODB.Command.
    Due soli veniali inconvenienti, ma per il resto è tutto OK. Essi sono :

    1. Se non inserisco un “On Error Resume Next” va in errore la linea rs.Open WebHost & "InsertMT.asp?Query=" & Criterio
    2. L’istruzione SQL (la query) non può essere più lunga di 2000 caratteri circa per cui non è possibile inserire molti dati; mi dispiace ma non penso si possa fare niente.
    3. Nella query bisogna sostituire il carattere # con un altro carattere (ad esempio |) in quando il # non passa; un doppio replace (lato VB e lato ASP) e tutto è OK.
    4. Lo stesso succede per il carattere asterisco; un banale replace ovvia al tutto.

    Grazie di cuore !
    ... veramente non era questo che intendevo ... anche se funziona

    Se ti va bene come hai fatto ignora il resto.

    Non so ti sei letta questo :
    http://www.nicolaottomano.it/it-lang...i/DBRemoto.htm

    ... ad un certo punto, lato asp esegue l'UpdateBatch che tu non puoi eseguire
    per i motivi che ho provato a spiegare

    codice:
    Set rs = Server.CreateObject("ADODB.Recordset")
    Set stm = Server.CreateObject("ADODB.Stream")
    Set conn = Server.CreateObject("ADODB.Connection")
        
    conn.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};dbq=" & _
        Server.MapPath("example.mdb")
    conn.CursorLocation = adUseClient
    conn.Open 
        
    With rs
        .CursorLocation = adUseClient
        .Open Request
        .ActiveConnection = conn
        .UpdateBatch
    End With
    Nel tuo caso dovresti invece fare una cosa del genere (... è solo una bozza non provata) :

    codice:
    Set rs = Server.CreateObject("ADODB.Recordset")
    Set cmd = Server.CreateObject("ADODB.Command")
    Set conn = Server.CreateObject("ADODB.Connection")
        
    conn.ConnectionString = "driver={Microsoft Access Driver (*.mdb)};dbq=" & _
        Server.MapPath("example.mdb")
    conn.CursorLocation = adUseClient
    conn.Open 
    
    cmd.activeconnction=conn
        
    With rs
        .CursorLocation = adUseClient
        .Open Request
           
         'lo lasci disconnesso perchè nel tuo caso non ha senso collegarlo al db
        '.ActiveConnection = conn
        '.UpdateBatch 'queto va commentato perchè a te non funzionerà 
        
         while not .eof
            cmd.commandeText = <costruisco la insert in base al record corrente di rs>
            N.B. andrebbero usati i parametri su cui ti invito a documentarti
             cmd.execute
            .movenext
         wend  
    
    
    End With
    etc ...

    HTH
    Ultima modifica di sspintux; 10-02-2014 a 13:46

  9. #19
    OK.
    Sembra proprio che la mia soluzione funzioni. Se per caso avessi dei problemi adotterò la tua e già vedo che il mio piccolo inconveniente (punto 1) con il tuo codice dovrebbe scomparire.
    Grazie di tutto. Ho imparato qualcosa in più.

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.