PDA

Visualizza la versione completa : [VB6][ADO][ASP][db remoto] problema risolto definitivamente!!!


imente
22-08-2002, 12:14
se avete mai affrontato tale problema, se vi siete invischiati adesso, se avete letto i miei vecchi DISPERATI 3D allora ecco ci che vi serve(r)

problema:

database su internet in remoto
programma in locale in VB che deve accedere al DB remoto e poterlo modificare

soluzione:

1. soluzione composita
utilizzando ADO, ASP e XML per la gestione del database, e visualizzando il tutto in VB

2. soluzione DLL
utilizzando una dll sul server che comunica con il VB in locale (soluzione attuabile solo se il server TUO, poich spesso non consentito registrare componenti sui server...)

suggerisco per la maggior parte delle persone (su server free o a pagamento) la soluzione 1, comoda, semplice e veloce

la seconda soluzione da preferirsi per "pulizia" e "performances", per per contro necessita della registrazione della DLL sul server, operazione attuabile solo se si hanno i poteri di Amministratore

--------------------------------------------------------------------

ecco qu entrambe le soluzioni con esempi tutto in italiano!
(scovate da me... alla fine dopo lunghe peripezie!!!)

http://www.morenosoft.com/msvbsite/pagestruct.asp?lang=Ita&type=4&ID=89

--------------------------------------------------------------------

sperando sia utile a tante persone che hanno avuto il mio stesso problema...

ciao!

ciataluga
05-09-2002, 21:02
Ciao,scusa se rompo ma ho scaricato l'esempio relativo all' articolo da te postato, e a me funziona in parte.Ho copiato le pagine asp sotto la directory c:\inetpub\wwwroot\dbremoti assieme al database, ho sistemato l'indirizzo nell'applicazione client da http://localhost a http://localhost/dbremoti e ho avviato l'applicazione : in fase di lettura tutto OK (mi riempie il datagrid) ma quando cerco di aggiornare mi da errore 3704 (l'operazione non consentita se l'oggetto chiuso).Potresti darmi una mano??

imente
05-09-2002, 21:39
premetto che non mio quell'esempio
ma che ne capisco abbastanza da poterti aiutare...

vediamo per bene di capire qual' il problema

quando carichi allright
quando salvi problemi...

dimmi esattamente la riga che ti da problemi...

spero tu non abbia modificato ne le parti ASP, ne le VB
altrimenti torna all'inizio, e cerca di farlo fungere.
se non funge dimmi dove non funge (riga...)

poich sempre meglio prima fare funzionare la base
poi si operano le modifiche del caso (come io stesso
ho fatto, aggiungendo parametri di Queraggio per la
selezione, e una password sul db)

perch mi risulta strano tutto questo

fammi sapere...

ciataluga
05-09-2002, 22:24
Ti posto il codice del client:
"
Option Explicit

Private rs As ADODB.Recordset

'Modificate la riga seguente con l'URL delle pagine ASP
Private Const RemotePath = "http://localhost/dbremoti/"
Private Sub cmdRequery_Click()

Set rs = New ADODB.Recordset
With rs
If .State = adStateOpen Then .Close
.CursorLocation = adUseClient
.Open RemotePath & "query.asp?TableName=Address"
End With

If rs.Fields(0).Name = "Type" And rs.Fields(0).Value = "##Error##" Then
MsgBox rs("Description") & vbCrLf & "Codice: " & rs("Code"), vbCritical, rs("Source")
Else
Set DataGrid1.DataSource = rs
End If
'rs.Close
End Sub

Private Sub cmdUpdate_Click()

Dim stm As ADODB.Stream
Dim xml As MSXML.XMLHTTPRequest

Set xml = New MSXML.XMLHTTPRequest
Set stm = New ADODB.Stream

rs.Save stm, adPersistXML
xml.Open "POST", RemotePath & "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 Sub

Private Sub Form_Load()

Call cmdRequery_Click

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

Set rs = Nothing

End Sub
"
... e quelli dele pagine ASP

"query.asp"


<%
Dim rs
Dim stm
Dim conn

On Error Resume Next

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

rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM " & Request.QueryString("TableName"), conn , adOpenkeyset, adLockBatchOptimistic

If Err Then
Set rs = Server.CreateObject("ADODB.Recordset")
With rs
If .State = adStateOpen Then .Close
.Fields.Append "Type", adVarChar, 9
.Fields.Append "Source", adVarChar, 50
.Fields.Append "Description", adVarChar, 255
.Fields.Append "Code", adInteger
.Open
.AddNew
.Fields("Type") = "##Error##"
.Fields("Source")= Err.Source
.Fields("Description") = Err.Description
.Fields("Code") = Err.Number
.BatchUpdate
End With
End If

rs.Save stm, adPersistXML

Response.ContentType = "text/xml"
Response.Write stm.ReadText

stm.Close
rs.Close
Set stm = Nothing
Set rs = Nothing
%>

e "update.asp"


<%

Dim rs
Dim stm
Dim conn

On Error Resume Next

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

If Err Then
Response.ContentType = "text/xml"
Response.Write Err.Source & vbCrLf & Err.Description & vbCrLf & "Codice: " & Err.Number
End If

stm.Close
rs.Close
Set stm = Nothing
Set rs = Nothing
%>



L'errore si genera nella fase client nella riga evidenziata in rosso .
Io non ho cambiato niente solo la posizione delle pagine e del DB come ho scritto prima... spero ti possa aiutare a darmi una mano....
P.S.: anche "adovbs.inc" sotto la cartella c:\inetpub\wwwroot\dbremoti .

macly
06-09-2002, 00:01
Complimenti per il tuo articolo.
Io ho il seguente problema:
Piu Pc (ognuno con un suo database Access)devono trasferire i loro dati ad un DATABASE Centrale . Questi Pc si collegano via modem in Internet e contattano Il DATABASE Centrale.

Mi sapresti indicare con quale STRINGA di connessione ADO?
Ho provato con questa ma non va:DICE errore nel server web.

conn.open "Provider=MS Remote;" &_
"Remote Server=http://127.0.0.1;" &_
"Remote Provider=Microsoft.Jet.OLEDB.4.0;" &_
"Data Source=d:\myweb\db.mdb;"


GRAZIE TANTO...MAX

ciataluga
06-09-2002, 00:59
Originariamente inviato da macly
Complimenti per il tuo articolo.
Io ho il seguente problema:.....
Prova cosi' :
conDB.Open ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " & server.mappath("db.mdb")) e spero di non sbagliarmi.

Loading