06. marts 2004 - 18:00Der er
68 kommentarer og 1 løsning
ASP / XML - haj søges !
Hej,
Jeg søger en "asp/xml-haj" som vil hjælpe mig med at lave en asp side som henter nogle adressedata i XML fra nettet og som skal sættes ind i nogen formularfelter på en asp-side for efterfølgende med en knap at kunne indsættes / opdateres i en access database.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Ser du - Jeg behøver en asp side hvor jeg kan indtaste et tlfnr i et formularfelt. Herefter skal jeg kunne trykke "Søg" hvorefter der først kontrolleres i en access database om tlfnr. eksisterer
- eksisterer tlfnr skal den blot svare tilbage på siden at nummeret findes
- hvis ikke skal den gå på nettet og lave en søgning og hive resultatet ud af et xml svar og indsætte det på asp sidens formularfelter navn - adresse - osv.
Derefter skal jeg selv kunne udfylde et par ekstra formularfelter manuelt og slutteligt trykke på en "Indsæt i database" knap.
Jeg har erhvervet mig adgang til "oplysningen" hvor jeg kan få svarene tilbage i xml.
Håber jeg har forklaret mig lidt bedre denne gang, ellers spørg løs...
jo, mit <resultat> bør hedde noget andet .. .jeg skrev det bare for at antyde hvordan xml'en bør se ud.
det er jo ikke noget galt i at poste xml'en her inde. det er jo ikke den du betaler for ... det er jo adgang til sitet der laver xml'en du betaler for. så længe du ikke oplyser hvor xml'en kommer fra og dine adgangskoder, kan det jo ikke ske noget.
Hvis du kunne poste en hel xml, så ville det være godt. du kan blanke ud informationerne ... jeg ønsker bare at se xml strukturen
<%@language="vbscript"%> <% Dim strMode Dim strPhoneNumber, strName, strAdress, strZipCode, strCity Dim objConn : Set objConn = Server.CreateObject( "ADODB.Connection" ) Dim strDSN : strDSN = "[DINE DATABASE INFORMATIONER]"
if( Request("search") <> "" ) Then Dim strSQL : strSQL = "SELECT * FROM tabel WHERE phonenumber = '" & Request("phonenumber") & "'" Dim objConn : Set objConn = Server.CreateObject( "ADODB.Connection" ) Dim strDSN : strDSN = "[DINE DATABASE INFORMATIONER]" objConn.Open strDSN Set objRS = objConn.Execute( strSQL )
if( objRS.EOF ) Then ' nummeret findes ikke i basen, og det skal hentes fra 'oplysning' Dim objHTTP : Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP") Dim objXMLdoc : Set objXMLDoc = Server.CreateObject( "MSXML2.DOMDocument" ) Call objHTTP.Open( "POST", "http://xxxxx/xxxxx/xxxx.asp?adgangskoder&tlf=" & Request("phonenumber"), false ) Call objHTTP.setRequestHeader( "Content-Type", "text/xml" ) Call objHTTP.Send()
' Last XML ind i DOM objXMLDoc.loadXML( objHTTP.responseText ) ' Tjekker for hvor mange hits der er Dim strHits : strHits = objXMLDoc.selectSingleNode( "/NUMMEROPLYSNING/ANTALSVAR/IALT" ).text
if( CInt( strHits ) > 0 ) Then strPhoneNumber = objXMLDoc.selectSingleNode( "/NUMMEROPLYSNING/SVARLISTE/RAEKKE[@NR='1']/TELEFON" ).text strName = objXMLDoc.selectSingleNode( "/NUMMEROPLYSNING/SVARLISTE/RAEKKE[@NR='1']/NAVN" ).text strAdress = objXMLDoc.selectSingleNode( "/NUMMEROPLYSNING/SVARLISTE/RAEKKE[@NR='1']/ADRESSE" ).text strZipCode = objXMLDoc.selectSingleNode( "/NUMMEROPLYSNING/SVARLISTE/RAEKKE[@NR='1']/POSTNR" ).text strCity = objXMLDoc.selectSingleNode( "/NUMMEROPLYSNING/SVARLISTE/RAEKKE[@NR='1']/BY" ).text end if End if objConn.Close End if if( Request.QueryString("insert") <> "" ) Then objConn.Open strDSN
ok ... du kører med <% option explicit %> på din side. fejlen betyder, som den siger, at der bliver deklareret en variabel der allerede er deklareret på siden. Hvis der allerede er en variabel der hedder 'strSQL' på din side, så har du ikke behov for at sætte 'Dim' foran den når du skal bruge den igen.
Når jeg kører linien får jeg nu syntax error i line 10. Forsøger jeg at forsætte dukker siden op med formularfelterne dog uden formularfeltet Navn. taster jeg et nr og søger på det får jeg flg. fejl.
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
har du prøvet at skrive ud din SQL ? if( Request("search") <> "" ) Then Dim strSQL : strSQL = "SELECT * FROM kunder WHERE TelefonNr = '" & Request("phonenumber") & "'" Response.Write( "SQL: " & strSQL ) Response.End objConn.Open strDSN Set objRS = objConn.Execute( strSQL )
hvordan ser din SQL ud ? kan du køre den direkte i din database ?
Når nummeret findes i databasen - kan den så ikke bare komme med en linie hvori den skriver at nummeret allerede findes. Findes nummeret skal jeg nemlig ikke have foretaget mig yderligere med oplysningerne da de allerede findes i databasen.
jeg forstår ikke hvad du mener med "Forsat samme fejl ved start af filen, men når jeg blot ignorerer den kommer jeg videre til denne fejl ved forsøg på opslag af nr"
- "Start af filen" ?? - "Ignorerer den" ?? Hvad er det du ignorerer ? Hvis du får en fejl, så kan du ikke ignorere den.
jo den kommer op som popup fejl ved eksekvering af filen og spørger om jeg vil debug fejlen - da svarer jeg blot nej og så kommer jeg videre i forløbet.
Når jeg efterfølgende taster et tlfnr kommer den op med fejlen igen ang. linie 10, - når jeg stadig trykker annuller for debug - henter den dataene ind i formularfelterne - formularfeltet for navn kommer ikke frem på siden ?
gider du ikke smide selve koden i en txt fil, så jeg har mulighed til at tjekke den. det tyder på at du mangler at lukke en 'if' statement.
du skal huske på at linjenummeret ikke referere til den renderede HTML, men til asp koden. hvis det er fejl i linje 71, så er det i asp koden du skal finde linje 71.
hmm ... der er sket noget underlig i din kode ... den skal se sådan ud (jeg har ikke testet denne kode )
<%@language="vbscript"%> <% option explicit %> <% Dim strMode Dim strPhoneNumber, strName, strAdress, strZipCode, strCity Dim objConn : Set objConn = Server.CreateObject( "ADODB.Connection" ) Dim strDSN : strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=E:\Website\oplysning.mdb" Dim strSQL
if( Request("search") <> "" ) Then strSQL = "SELECT * FROM kunder WHERE TelefonNr = '" & Request("phonenumber") & "'"
objConn.Open strDSN Dim objRS : Set objRS = objConn.Execute( strSQL )
if( objRS.EOF ) Then ' nummeret findes ikke i basen, og det skal hentes fra 'oplysning' Dim objHTTP : Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP") Dim objXMLdoc : Set objXMLDoc = Server.CreateObject( "MSXML2.DOMDocument" ) Call objHTTP.Open( "POST", "http://xxxxxxxxxxx" & Request("phonenumber"), false ) Call objHTTP.setRequestHeader( "Content-Type", "text/xml" ) Call objHTTP.Send()
' Last XML ind i DOM objXMLDoc.loadXML( objHTTP.responseText ) ' Tjekker for hvor mange hits der er Dim strHits : strHits = objXMLDoc.selectSingleNode( "/NUMMEROPLYSNING/ANTALSVAR/IALT" ).text
(( husk at læse det linket jeg gav dig om hvordan du sætter noget ind i en database. Du vil højst sandsynligt få mere hjælp fra den artikel, end at jeg skal hjælpe dig via et forum ;o] ))
Når jeg trykker på min "indsæt" knap ser det umiddelbart ud til at den vil sætte det ind i databasen, men når jeg ser efter er der ikke kommet noget ind i den. Jeg har også lavet en reset knap - den virker ski' heller ikke efter hensigten. Hva hulen gør jeg forkert ?
- PS jo og jeg har læst dit link flere gange men det har ikke hjulpet mig.
er du sikker på at din SQL bliver kørt ? har du prøvet at "stoppe" scriptet efter din SQL bliver genereret ? hvis din INSERT SQL bliver kørt og der ikke kommer fejl, så er det ikke særlig store sandsynligheder for at du ikke skal finde data i basen.
nu vil du kunne se din SQL. prøv derefter at kør denne direkte i basen
hvis ikke det fungere, prøv at lave et simpelt formular som du kan taste nogle data ind i og gem det i basen. prøv at selv skrive eksempelet fra det link jeg postet. nogle gange finder du først fejl/forskelle fra et script til et andet når du skriver linje for linje. prøv at få et simpelt formular til at sætte ind i database. når du har gjort dét, så prøv å se hvad der er forskel på det script der fungere, og det script du faktisk arbejder på.
Jeg har prøvet at indsætte response.write linierne for at få udskrevet sql'en på siden. Der sker ingenting. Når jeg trykker på indsæt knappen - rydder den formularfelterne - hvilket jo er korrekt nok - men den skriver ikke noget ned i databasen ligesom at den heller ikke viser sql'en på siden på trods af response.write linierne....
Her mine linier som de ser ud nu:
if( Request.QueryString("insert") <> "" ) Then objConn.Open strDSN
så er det dit formular der er noget galt med. det lyder som om du har skiftet submit knappen ud med reset knappen. hvis du klikker på submit så *skal* scriptet skrive din SQL ud.
ahhh ... du bruger 'Request.QueryString' ... dette er et formular der bruger POST, og derfor skal du bruge 'Request.Form' ( eller som jeg har gjort tidligere i scriptet, blot 'Request'.
Denne linje:
if( Request.QueryString("insert") <> "" ) Then
skal være
if( Request.Form("insert") <> "" ) Then eller if( Request("insert") <> "" ) Then
ellers skal du passe på at de felter der er af typen 'nummer' i databasen ikke har '' rundt værdien ... det er kun felter i basen der er af en tekst type der skal have '' rundt værdien ... fx:
INSERT INTO tabel (EtTekstFelt, EtTalFelt) VALUES ( 'Tekst', 100 )
Har du prøvet at skrive din SQL ud ? som jeg tidligere har fortalt at du bør gøre (dette bør du *altid* gøre når dine SQL'er ikke kører). kig på dem ... prøv at køre dem direkte i din database (ikke via ASP). Har du nogle tomme felter ? tillader dine felter tomme værdier ?
Med denne linie skriver den fint nok indholdet af formularfelterne på siden. Jeg har sågar lavet en ny database, uden at det hjalp... Jeg er virkelig gået i stå lige nu. Nej der er data i alle felter.
derefter beder jeg dig om at eksekvere denne SQL direkte i basen.
har du gjort dette ?
hvis ikke dette fungere kan hjælpe dig, så send mig en kopi af din base (uden indhold), så skal jeg se om jeg ikke kan finde ud af hvad der er galt.
Jeg har også tidligere bedt dig om at prøve at skrive eksempelet her http://html.dk/tutorials/asp/lektion20.asp. HAr du gjort det ? har du prøvet at lege lidt med denne kode ? det er skrevet på så let forståeligt dansk at hvis du ikke kan få dette til at fungere, så mener jeg at du måske burde overlade dette til andre.
Prøv at lave en side hvor du ikke gør andet end at sætte noget ind i din database. Start med en side der ser sådan ud:
hvis dette fungere, så går du videre med at lægge flere felter ind. når du har gjort dette, så laver du et formular du kan fylde værdier ind i, som du så sætter ind i databasen.
prøv at lade din kode ligge et stykke tid ... fjern dig fra den ... lav noget andet ... prøv at genskab "indsæt" funktionaliteten *uden* "søg telefonnummer" funktionaliteten. del din funktionalitet op, og sørg for at hver enkeltstående funktionalitet fungerer og derefter set det sammen. vær kreativ. jeg har ingen mulighed for at være kreativ for dig.
Hmmm... nu har jeg lavet op til flere formularer og på forskellige sider og det kan godt fungerere, men den her side - den får jeg bare fejl på hele tiden...
Jeg har sendt dig hhv. database og asp fil på mail nu.
Håber du gider se på det for mig, for den her side den vil da nu slet ikke give sig for mig.
skal ikke have "strSQL : " med. Den skal se sådan ud:
strSQL = "INSERT INTO ..."
2) i linje 57 (Conn.Execute(...)), skal du skifte 'Conn' ud med 'objConn'
objConn.Execute( strSQL )
3) du har angivet en forkert kolonne i din SQL. Der er ingenting der hedder "Priside" .. .den hedder kun "Pris"
4) Din database skal være åben for at skrive i.
højre klik på databasen (.mdb filen), vælg properties (nederste menupunkt), security (den midterste fane) og giv skrive rettigheder til "everyone" (vælg "Everyone" og set kryds i "Write" boksen). jeg har kun en engelskk windows, så jeg aner ikke hvad disse ting hedder på dansk.
Men den laver et mellemrum foran dataene den sætter ind i databasens felter, hvilket betyder at når jeg søger på et nummer som findes i databasen giver den mig lov til at indsætte det samme nummer igen.
kokholm >> de udlovede points og et tak er nok ;o] Tak tak ...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.