Ho provato, senza successo, nel seguente modo :
1) creo un recordset disconnesso
2) lo popolocodice: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
3) creo lo stream e lo invio alla pagina Update.aspcodice: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
Questa è la pagina Update.aspcodice: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
Risultato: lo stream sembra corretto, il file XML (FilePerDebug.XML) pure ma il tutto produce un MsgBox con il seguente errore :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 %>
"Le informazioni sulla tabella di base non sono sufficienti per effettuare l'aggiornamento".
Grazie anticipatamente a coloro che vorranno aiutarmi.
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
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
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
Ricapitolando<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>
Purtroppo non so se l'errore avviene lato VB o lato ASP. Capire questa cosa sarebbe già un passo notevole.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
Ultima modifica di giustavalla; 08-02-2014 a 11:10