Visualizzazione dei risultati da 1 a 10 su 19

Hybrid View

  1. #1
    Ho provato, senza successo, nel seguente modo :
    1) creo un recordset disconnesso
    codice:
       Dim rsD As ADODB.Recordset
       Set rsD = New ADODB.Recordset
       If rsD.State = adStateOpen Then rsD.Close
       Set rsD.ActiveConnection = Nothing ' non so se serve
       rsD.Fields.Append "IDeffettuazione", 3
       rsD.Fields.Append "IDGita", 3
       rsD.Fields.Append "IDValle", 3
       rsD.Fields.Append "Data", 7
       rsD.Fields.Append "Meteo", 202, 100
       ...............
        rsD.Open
    2) lo popolo
    codice:
     rsD.AddNew
       rsD("IDeffettuazione") = IDEff
       rsD("IDGita") = IDGitaEff
       rsD("IDValle") = 1     ' da perfezionare
       rsD("Data") = Now
       rsD("Meteo") = Left(Trim$(Tx(0)), 100)
       ............
       rsD.Update
    3) creo lo stream e lo invio alla pagina Update.asp
    codice:
     rsD.Save stm, adPersistXML
       stm.SaveToFile FilePerDebug, adSaveCreateOverWrite ' debug
       xml.Open "POST", WebHost & "Update.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
    Questa è la pagina Update.asp
    codice:
    <% 
    Dim rs, stm,  ErrorMessage
    on error resume next
    strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbEff.mdb"
    Set rs = Server.CreateObject ("ADODB.Recordset")
    Set stm = Server.CreateObject("ADODB.Stream")
    with rs
        .CursorLocation = 3  ' adUseClient
        .Open Request
        .ActiveConnection =strConn
        .UpdateBatch
    end with
    if err then
            ErrorMessage =  "RSUpdate error: " & err.Description & "[" & err.Number & "]"
            rs.Save stm,1   ' adPersistXML
           ' Set content type to xml, specify XSL for formatting, then push XML stream text to calling component:
            Response.ContentType = "text/xml"
            Response.Write "<!-- " & ErrorMessage &  " -->"        ' This is treated as a comment
            Response.Write "<?xml:stylesheet type=""text/xsl"" href=""recordsetxml.xsl""?>" & vbCrLf
            Response.Write stm.ReadText
    end if
    %>
    Risultato: lo stream sembra corretto, il file XML (FilePerDebug.XML) pure ma il tutto produce un MsgBox con il seguente errore :
    "Le informazioni sulla tabella di base non sono sufficienti per effettuare l'aggiornamento".

    Grazie anticipatamente a coloro che vorranno aiutarmi.

  2. #2
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    .......
    seguente errore :
    "Le informazioni sulla tabella di base non sono sufficienti per effettuare l'aggiornamento".
    ....
    potrebbe dipendere dal fatto che nella costruzione del recordset disconnesso di partenza
    non hai specificato quale sia la chiave primaria, ragion per cui quando lo ricolleghi al db
    (dopo averlo ricostruito nella pagina asp) ado non sa come individuare le righe
    da aggiungere/modificare/cancellare.

    HTH

  3. #3
    Non sapendo (per il momento) come aggiungere un indice ad un recordset disconnesso ho provato a cancellare i 3 indici della tabella (che quindi non ha chiave primaria) senza però riuscire ad ottenere un risultato positivo.
    Nulla di fatto quindi; il suggerimento era comunque interessante.
    Grazie

  4. #4
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    Non sapendo (per il momento) come aggiungere un indice ad un recordset disconnesso ho provato a cancellare i 3 indici della tabella (che quindi non ha chiave primaria) senza però riuscire ad ottenere un risultato positivo.
    Nulla di fatto quindi; il suggerimento era comunque interessante.
    Grazie
    ...credo proprio che senza chiave primaria la situazione non migliori .

    Non ho il vb6 a disposizione per provare ... comunque , anche senza scomodare MDSN o google, potresti fare questa prova;

    - crei una tabella con la pk sia in un db locale che quello remoto
    -leggi la tabella dal db locale (quindi recordset connesso) avendo cura di includere nella select anche la PK
    - disconnetti il recordset ( set activeconnection=nothing)
    ed a questo punto potresti guardarti anche la proprietà attibutes del filed corrispondente alla pk

    ... e continui spedendo il recorset alla pagina asp come già facevi

    HTH

  5. #5
    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

  6. #6
    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

  7. #7
    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

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