|
| Delphi -> HTTP -> ASP (Kurt G). Fra : Stig Johansen |
Dato : 25-08-08 18:35 |
|
Hej.
Dette er noget ASP kode, der hører sammen med et indlæg ovre i
dk.edb.programmering.pascal
-------------- Kode (Kurt.asp) ------------------
<%@ LANGUAGE = VBScript %><% Option Explicit %><!--#include
virtual="/include_files/adovbs.inc.asp"--><!--#include
file="KurtDb.inc.asp"--><%
Dim SQL
Dim oRs
Dim Tablename
Dim Index
Dim FieldName
Dim Counter
Dim AdoCommandInsert
Dim RecordArray
Dim RecordCounter
Dim FieldArray
Tablename = Request.QueryString("Tabel")
Response.ContentType = "text/plain;"
' ----------------------- GET -------------------------
if Request.Servervariables("REQUEST_METHOD") = "GET" then
SQL = "SELECT * FROM " + Tablename
Set oRs = oConn.Execute(SQL)
if oRs.EOF then
Response.Write "No data found"
Response.End
end if
Counter = 0
for each FieldName in oRs.Fields
if Counter > 0 then Response.Write ";"
Response.Write FieldName.Name
Counter = Counter + 1
next
Response.Write vbCrLf
Do while (Not oRs.eof)
For Index=0 to (oRs.fields.count-1)
if Index > 0 then Response.Write ";"
if not isnull(oRs(Index)) then
Response.Write oRs(Index)
else
Response.Write " "
end if
Next
Response.Write vbCrLf
oRs.MoveNext
Loop
oRs.close
oConn.close
Set oRs = nothing
Set oConn = nothing
Response.End
end if
' ----------------------- POST -------------------------
SQL = "DELETE FROM " + Tablename
oConn.Execute SQL ' delete table
Set AdoCommandInsert = Server.CreateObject ("ADODB.Command")
AdoCommandInsert.ActiveConnection = oConn
AdoCommandInsert.CommandType = adCmdText
RecordArray = Split(Request.Form("Tekstfil"),vbCrLf)
FieldArray = Split(RecordArray(0),";")
SQL = "INSERT INTO " + Tablename + " VALUES("
For Counter = 0 to UBound(FieldArray) - 1
SQL = SQL + " ?,"
Next
SQL = SQL + " ? )"
AdoCommandInsert.CommandText = sql
For RecordCounter = 1 to UBound(RecordArray)
FieldArray = Split(RecordArray(RecordCounter),";")
For Counter = 0 to UBound(FieldArray)
AdoCommandInsert(Counter) = FieldArray(Counter)
Next
AdoCommandInsert.Execute
Next
oConn.close
Set AdoCommandInsert = nothing
Set oConn = nothing
Response.Write "Table updated"
%>
-------------- Kode (Kurt.form.asp) ------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
" http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="da">
<head>
<title>Test form</title>
</head>
<body>
<h3>Test form</h3>
<hr/>
<form method="POST" action="Kurt.asp?tabel=Samlet">
<fieldset>
<label for="Tekstfil">Enter Tekstfil Her</label>
<textarea cols="80" rows="23" name="Tekstfil" id="Tekstfil"
></textarea><br/>
<input type="submit" value="Submit Tekstfil to database" name="B1"/>
</fieldset>
</form>
<form method="GET" action="Kurt.asp">
<fieldset>
<input type="hidden" name ="tabel" value="Samlet"/>
<input type="submit" value="Get Tekstfil from database" name="B1"/>
</fieldset>
</form>
</body>
</html>
------------------------------
Have fun..
--
Med venlig hilsen/Best regards
Stig Johansen
| |
Stig Johansen (25-08-2008)
| Kommentar Fra : Stig Johansen |
Dato : 25-08-08 19:02 |
|
Hej igen.
Glemte lige includefilen:
<%
Dim oConn
Dim oConnString
Set oConn = Server.CreateObject("ADODB.Connection")
oConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Server.MapPath("kurt2000.mdb") + ";Persist Security Info=False"
oConn.Open oConnString
%>
--
Med venlig hilsen/Best regards
Stig Johansen
| |
Stig Johansen (26-08-2008)
| Kommentar Fra : Stig Johansen |
Dato : 26-08-08 18:34 |
|
En lille rettelse pga. blanke linier i input CSV'et.
> For RecordCounter = 1 to UBound(RecordArray)
> FieldArray = Split(RecordArray(RecordCounter),";")
> For Counter = 0 to UBound(FieldArray)
> AdoCommandInsert(Counter) = FieldArray(Counter)
> Next
> AdoCommandInsert.Execute
Rettes til
if UBound(FieldArray) > 1 then AdoCommandInsert.Execute
eller muligvis > 0 afhængig af behovet.
> Next
--
Med venlig hilsen/Best regards
Stig Johansen
| |
Kurt G (02-09-2008)
| Kommentar Fra : Kurt G |
Dato : 02-09-08 18:14 |
|
---- KLIPPET ----
Så er jeg i gang med ovenstående, og så kommer problemerne.
I linien
<!--#include virtual="/include_files/adovbs.inc.asp"-->
kommer der en fejlmelding, idet filen ikke findes.
Er det en fil, der normalt er på serveren?
Mvh Kurt
| |
Finn Elmgaard (02-09-2008)
| Kommentar Fra : Finn Elmgaard |
Dato : 02-09-08 19:44 |
|
"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:48bd86ea$0$90267$14726298@news.sunsite.dk...
> ---- KLIPPET ----
> Så er jeg i gang med ovenstående, og så kommer problemerne.
>
> I linien
> <!--#include virtual="/include_files/adovbs.inc.asp"-->
> kommer der en fejlmelding, idet filen ikke findes.
>
> Er det en fil, der normalt er på serveren?
>
Det er ikke helt præcis det du skriver, men prøv at kigge på dette:
http://www.4guysfromrolla.com/webtech/faq/Beginner/faq7.shtml
mvh
Finn
| |
Kurt G (02-09-2008)
| Kommentar Fra : Kurt G |
Dato : 02-09-08 22:23 |
|
KLIP
>> I linien
>> <!--#include virtual="/include_files/adovbs.inc.asp"-->
>> kommer der en fejlmelding, idet filen ikke findes.
>>
>> Er det en fil, der normalt er på serveren?
>>
>
> Det er ikke helt præcis det du skriver, men prøv at kigge på dette:
>
> http://www.4guysfromrolla.com/webtech/faq/Beginner/faq7.shtml
>
> mvh
> Finn
>
Det hjalp at få den hentet og lagt ind i roden (nu har jeg nemlig en masse
andre fejl :-])!
Mange tak.
Kurt
| |
Stig Johansen (03-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 03-09-08 00:33 |
|
Kurt G wrote:
> KLIP
>>> I linien
>>> <!--#include virtual="/include_files/adovbs.inc.asp"-->
>>> kommer der en fejlmelding, idet filen ikke findes.
>>>
>>> Er det en fil, der normalt er på serveren?
>>>
>>
>> Det er ikke helt præcis det du skriver, men prøv at kigge på dette:
>>
>> http://www.4guysfromrolla.com/webtech/faq/Beginner/faq7.shtml
>>
>> mvh
>> Finn
>>
> Det hjalp at få den hentet og lagt ind i roden (nu har jeg nemlig en masse
> andre fejl :-])!
I roden ?
Nu skriver du det hjalp, men jeg ville passe på med at lave for meget 'rod'
i 'roden' :)
Du skriver ikke hvilke fejl du nu får,men den demo jeg lavede benytter en
Access database, kurt2000.mdb, som ligger i samme directory som ASP
filerne.
Det er ikke god latin, da den dermed (muligvis) kan downloades direkte.
List afhængig af hvordan din server er strikket sammen, skal du have
justeret denne her
Server.MapPath("kurt2000.mdb")
i includefilen KurtDb.inc.asp
Har du et database og public_html directory i din FTP?
--
Med venlig hilsen
Stig Johansen
| |
Kurt G (03-09-2008)
| Kommentar Fra : Kurt G |
Dato : 03-09-08 09:32 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:48bdcda0$0$90272$14726298@news.sunsite.dk...
---KLIP---
>> Det hjalp at få den hentet og lagt ind i roden (nu har jeg nemlig en
>> masse
>> andre fejl :-])!
>
> I roden ?
> Nu skriver du det hjalp, men jeg ville passe på med at lave for meget
> 'rod'
> i 'roden' :)
>
> Du skriver ikke hvilke fejl du nu får,men den demo jeg lavede benytter en
> Access database, kurt2000.mdb, som ligger i samme directory som ASP
> filerne.
> Det er ikke god latin, da den dermed (muligvis) kan downloades direkte.
> List afhængig af hvordan din server er strikket sammen, skal du have
> justeret denne her
> Server.MapPath("kurt2000.mdb")
> i includefilen KurtDb.inc.asp
Jeg har fået rettet filernes placering til således(- er et niveau ned):
sitename.dk
-db
--Databasen.mdb
-inc_files
--adovbs.inc.asp
--Kurt.inc.asp
-Skalk
--Register
---Kurt.asp
> Har du et database og public_html directory i din FTP?
Jeg er ikke med på, hvad du mener.
Udbyderen er web10, hvis det hjælper på spørgsmålet!
> Med venlig hilsen
> Stig Johansen
Når jeg ser Kurt.asp i Frontpage 2003 er der vist rammer mm., men på nettet
kommer den ikke så langt, inden der kommer disse tekster på skærmen:
<font face="Arial" size=2>
<p>Microsoft JET Database Engine</font> <font face="Arial" size=2>error
'80040e14'</font>
<p>
<font face="Arial" size=2>Syntax error in FROM clause.</font>
<p>
<font face="Arial" size=2>/Skalk/Register/Kurt.asp</font><font face="Arial"
size=2>, line 26</font>
Hvor det stammer fra, kan jeg ikke umiddelbart se, men jeg forsøger mig
fortsat frem!
Mvh Kurt
| |
Stig Johansen (03-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 03-09-08 18:57 |
|
Kurt G wrote:
> Når jeg ser Kurt.asp i Frontpage 2003 er der vist rammer mm., men på
> nettet kommer den ikke så langt, inden der kommer disse tekster på
> skærmen:
>
> <font face="Arial" size=2>
> <p>Microsoft JET Database Engine</font> <font face="Arial" size=2>error
> '80040e14'</font>
> <p>
> <font face="Arial" size=2>Syntax error in FROM clause.</font>
> <p>
> <font face="Arial" size=2>/Skalk/Register/Kurt.asp</font><font
> face="Arial" size=2>, line 26</font>
>
> Hvor det stammer fra, kan jeg ikke umiddelbart se, men jeg forsøger mig
> fortsat frem!
Jeg har zippet det (asp tingene) sammen her
< http://w-o-p-r.dk/tips/asp/kurt.zip>
Vær opmærksom på, at der er sammenhæng mellem tabel navn, querystring osv.
Tabellen i zip filen(.mdb) hedder Samlet, og det hænger sammen med formen:
<input type="hidden" name ="tabel" value="Samlet"/>
Dvs i asp koden forventer vi en
Request.QueryString("Tabel")
som gerne skulle indeholde værdien "Samlet" som specificeret.
--
Med venlig hilsen
Stig Johansen
| |
Kurt G (04-09-2008)
| Kommentar Fra : Kurt G |
Dato : 04-09-08 09:17 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:48bed03c$0$90273$14726298@news.sunsite.dk...
---Klippet---
> Jeg har zippet det (asp tingene) sammen her
Det er den, jeg har brugt som basis
---Klippet--
> Vær opmærksom på, at der er sammenhæng mellem tabel navn, querystring osv.
> Tabellen i zip filen(.mdb) hedder Samlet, og det hænger sammen med formen:
> <input type="hidden" name ="tabel" value="Samlet"/>
> Dvs i asp koden forventer vi en
> Request.QueryString("Tabel")
> som gerne skulle indeholde værdien "Samlet" som specificeret.
---Klippet---
Det burde også være i orden.
Jeg kan sagtens fra D5-programmet modtage data fra serveren, men når jeg vil
uplade igen, kommer fejlene.
For at finde ud af, hvor fejlen opstår, har jeg lavet nogle response.write i
ASP-programmet.
Det må jeg hellere fortælle om i ASP-gruppen.
Mvh Kurt
| |
Kurt G (04-09-2008)
| Kommentar Fra : Kurt G |
Dato : 04-09-08 09:27 |
|
---KLIPPET---
> Når jeg ser Kurt.asp i Frontpage 2003 er der vist rammer mm., men på
> nettet kommer den ikke så langt, inden der kommer disse tekster på
> skærmen:
>
> <font face="Arial" size=2>
> <p>Microsoft JET Database Engine</font> <font face="Arial" size=2>error
> '80040e14'</font>
> <p>
> <font face="Arial" size=2>Syntax error in FROM clause.</font>
> <p>
> <font face="Arial" size=2>/Skalk/Register/Kurt.asp</font><font
> face="Arial" size=2>, line 26</font>
>
> Hvor det stammer fra, kan jeg ikke umiddelbart se, men jeg forsøger mig
> fortsat frem!
>
> Mvh Kurt
For at spore fejlen, har jeg indsat nogle Response.Write i ASP-koden.
' ----------------------- POST -------------------------
response.write "Start af POST" + vbCrLf
response.flush
SQL = "DELETE FROM " + Tablename
response.write "1. POST. SQL='"+SQL+"'" + vbCrLf
response.flush
oConn.Execute SQL ' delete table
Set AdoCommandInsert = Server.CreateObject ("ADODB.Command")
AdoCommandInsert.ActiveConnection = oConn
AdoCommandInsert.CommandType = adCmdText
RecordArray = Split(Request.Form("Tekstfil"),vbCrLf)
FieldArray = Split(RecordArray(0),";")
SQL = "INSERT INTO " + Tablename + " VALUES("
response.write "2. POST. SQL='"+SQL+"'" + vbCrLf 'Dette er den sidste,
der udskrives
Response.write "2 UBound(FieldArray):'"+UBound(FieldArray)+"'" + vbCrLf
response.write "2 UBound(RecordArray):'"+UBound(RecordArray)+"'" + vbCrLf
response.flush
For Counter = 0 to UBound(FieldArray) - 1
SQL = SQL + " ?,"
Next
SQL = SQL + " ? )"
AdoCommandInsert.CommandText = sql
response.write "3. POST. 'AdoCommandInsert.CommandText = sql'.
SQL='"+SQL+"'" + vbCrLf
Response.write "UBound(FieldArray):"+UBound(FieldArray)
response.flush
.........................
Den enkeltstående linie er den sidste der udskrives:
Start af POST
1. POST. SQL='DELETE FROM SamletRegister'
2. POST. SQL='INSERT INTO SamletRegister VALUES('
<font face="Arial" size=2>
<p>Microsoft VBScript runtime </font> <font face="Arial" size=2>error
'800a000d'</font>
<p>
<font face="Arial" size=2>Type mismatch: '[string: "2
UBound(FieldArray)"]'</font>
<p>
<font face="Arial" size=2>/Skalk/Register/Kurt.asp</font><font face="Arial"
size=2>, line 67</font>
Kan det være noget timeout?
Kurt
| |
Jørn Andersen (04-09-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 04-09-08 16:52 |
|
On Thu, 4 Sep 2008 10:27:23 +0200, "Kurt G" <kurt_g@guldbaek.net> wrote:
><p>Microsoft VBScript runtime </font> <font face="Arial" size=2>error
>'800a000d'</font>
><p>
><font face="Arial" size=2>Type mismatch: '[string: "2
>UBound(FieldArray)"]'</font>
Hvilket tyder på, at FieldArray ikke er et array.
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
Stig Johansen (04-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 04-09-08 16:59 |
|
Kurt G wrote:
> ---KLIPPET---
> For at spore fejlen, har jeg indsat nogle Response.Write i ASP-koden.
>
> ' ----------------------- POST -------------------------
> response.write "Start af POST" + vbCrLf
> response.flush
> SQL = "DELETE FROM " + Tablename
> response.write "1. POST. SQL='"+SQL+"'" + vbCrLf
> response.flush
> oConn.Execute SQL ' delete table
>
> Set AdoCommandInsert = Server.CreateObject ("ADODB.Command")
> AdoCommandInsert.ActiveConnection = oConn
> AdoCommandInsert.CommandType = adCmdText
>
> RecordArray = Split(Request.Form("Tekstfil"),vbCrLf)
> FieldArray = Split(RecordArray(0),";")
> SQL = "INSERT INTO " + Tablename + " VALUES("
>
> response.write "2. POST. SQL='"+SQL+"'" + vbCrLf 'Dette er den
> sidste, der udskrives
>
> Response.write "2 UBound(FieldArray):'"+UBound(FieldArray)+"'" + vbCrLf
> response.write "2 UBound(RecordArray):'"+UBound(RecordArray)+"'" + vbCrLf
> response.flush
> For Counter = 0 to UBound(FieldArray) - 1
> SQL = SQL + " ?,"
> Next
> SQL = SQL + " ? )"
>
> AdoCommandInsert.CommandText = sql
> response.write "3. POST. 'AdoCommandInsert.CommandText = sql'.
> SQL='"+SQL+"'" + vbCrLf
> Response.write "UBound(FieldArray):"+UBound(FieldArray)
> response.flush
> ........................
> Den enkeltstående linie er den sidste der udskrives:
>
> Start af POST
> 1. POST. SQL='DELETE FROM SamletRegister'
> 2. POST. SQL='INSERT INTO SamletRegister VALUES('
> <font face="Arial" size=2>
> <p>Microsoft VBScript runtime </font> <font face="Arial" size=2>error
> '800a000d'</font>
> <p>
> <font face="Arial" size=2>Type mismatch: '[string: "2
> UBound(FieldArray)"]'</font>
> <p>
> <font face="Arial" size=2>/Skalk/Register/Kurt.asp</font><font
> face="Arial" size=2>, line 67</font>
>
> Kan det være noget timeout?
Jeg har undladt at klippe for meget væk af hensyn til sammenhængen.
Først skal du bemærke at jeg generelt bruger '+' i stedet for '&' i
modsætning til "normen" i ASP.
Det gør jeg fordi jeg nogle gange sidder med åbne vinduer med hhv
ASP,Javascript samt Delphi - altså + alle 3 steder, så man(jeg) ikke bliver
forvirret.
Men det betyder at denne her
Response.write "2 UBound(FieldArray):'"+UBound(FieldArray)+"'" + vbCrLf
er en kombination af en String og et Tal (Integer).
På samme måde som man i Delphi ville bruge IntToStr, skal du her bruger cStr
(convert to string), så prøv:
Response.write "2 UBound(FieldArray):'"+cStr(UBound(FieldArray))+"'" +
vbCrLf
Selve SQL'et er baseret på overskrifterne fra CSV'et, og består kun af lige
så mange ? som der er overskrifter(felter).
Det skulle gerne blive til
INSERT INTO SamletRegister VALUES(?,?,?.....)
Hvert ? repræsenterer en parameter, der senere sættes op.
Det er vigtigt der er 100% overensstemmelse mellem antallet af parametre og
definitionen af din SamletRegister tabel.
Hvis der ikke er 100% overensstemmelse mellem CSV-filen og tabellen, skal vi
have feltnavnene med, sp SQL'et skal bygges som
INSERT INTO SamletRegister (Felt1,Felt2,...) VALUES(?,?,?.....)
Hvor der så skal være overensstemmelse mellem Felterne og +-tegnene.
En anden ting du skal være opmærksom på, er Access's spidsfindighed med ikke
at tillade tomme strenge.
Altså ikke NULL, men ''.
Hvis du har den slags, dvs. ;; i din CSV, skal du enten lave den om til en
blank ' ' eller rette Access til at tillade tomme strenge.
Skriv gerne hvilken fejl du får fra databasen - den fejl du får nu er en
fejl i dit response.write statement.
--
Med venlig hilsen
Stig Johansen
| |
Kurt G (05-09-2008)
| Kommentar Fra : Kurt G |
Dato : 05-09-08 08:18 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:48c00624$0$90275$14726298@news.sunsite.dk...
> Kurt G wrote:
>
>> ---KLIPPET---
> Skriv gerne hvilken fejl du får fra databasen - den fejl du får nu er en
> fejl i dit response.write statement.
>
> --
> Med venlig hilsen
> Stig Johansen
Efter at have rettet som foreskrevet, fik jeg fejlmelding om "Data type
mismatch in criteria expression."
Efter lidt eksperiementeren fandt jeg ud af, at databasen ikke kunne lide et
" ", når der intet tal var.
Jeg prøvede så at ændre download til at lave "" i stedet for " " ved tomme
felter, men det hjalp ikke.
Jeg rettede så i databasedefinationerne talfelterne til tekstfelter, og så
kunne jeg uploade uden problemer.
Men jeg vil nu gerne bibeholde databasedefinationen for tal i stedet for
tekst, da det passer med resten af mit program på hjemmesiden.
Ligeledes vil jeg gerne have ændret down- og upload til at bruge
tabeloveskrifterne, da jeg får brug for en tabel mere samt ændre
datafelternes antal! (hvem sagde manglende overblik :-]).
Mvh Kurt
| |
Stig Johansen (05-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 05-09-08 18:41 |
|
"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:48c0e2c3$0$90276$14726298@news.sunsite.dk...
> "Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
> news:48c00624$0$90275$14726298@news.sunsite.dk...
> Efter at have rettet som foreskrevet, fik jeg fejlmelding om "Data type
> mismatch in criteria expression."
> Efter lidt eksperiementeren fandt jeg ud af, at databasen ikke kunne lide
et
> " ", når der intet tal var.
Damned NULL's
Databasen kan godt håndtere det, men de autogenererede parametre ligger som
default varchar, og en tom streng er ikke et tal.
Jeg har ændret loopet i Kurt.asp til:
.....
For Counter = 0 to UBound(FieldArray)
if Len(FieldArray(Counter)) = 0 then
AdoCommandInsert(Counter).value = null
else
AdoCommandInsert(Counter).value = FieldArray(Counter)
end if
Next
.....
Det virker med tal, men har den sideeffekt, at en tom streng dvs "" bliver
til NULL i databasen.
Jeg ved ikke om det betyder noget for dit system, altså om du skelner mellem
tomme strenge og NULL's.
Jeg har samtidig fjernet en response.write " " oppe i GET proceduren.
De opdaterede kildekoder kan du hente her:
http://w-o-p-r.dk/tips/asp/kurt.zip
> Jeg prøvede så at ændre download til at lave "" i stedet for " " ved tomme
> felter, men det hjalp ikke.
Det ændret ikke noget for tal jfr. ovenstående.
> Jeg rettede så i databasedefinationerne talfelterne til tekstfelter, og så
> kunne jeg uploade uden problemer.
> Men jeg vil nu gerne bibeholde databasedefinationen for tal i stedet for
> tekst, da det passer med resten af mit program på hjemmesiden.
Det kan du med ovenstående rettelser.
> Ligeledes vil jeg gerne have ændret down- og upload til at bruge
> tabeloveskrifterne, da jeg får brug for en tabel mere samt ændre
> datafelternes antal! (hvem sagde manglende overblik :-]).
Den forstår jeg ikke.
Antallet af felter bliver bygget ud fra hhv tabellen og tekstfilen.
Navnet på tabellen hentes fra URL'en, og kan bruges på samtlige tabeller i
databasen, og outputtet er et udtræk af felter + indhold.
Tekstfilen bør have samme struktur som tabellen, ellers mister du data,
eller er der noget jeg misforstår?
--
Med venlig hilsen/Best regards
Stig Johansen
| |
Kurt G (05-09-2008)
| Kommentar Fra : Kurt G |
Dato : 05-09-08 21:09 |
|
KLIP
Tak for rettelserne, dem vil jeg indføre.
> > Ligeledes vil jeg gerne have ændret down- og upload til at bruge
> > tabeloveskrifterne, da jeg får brug for en tabel mere samt ændre
> > datafelternes antal! (hvem sagde manglende overblik :-]).
>
> Den forstår jeg ikke.
> Antallet af felter bliver bygget ud fra hhv tabellen og tekstfilen.
> Navnet på tabellen hentes fra URL'en, og kan bruges på samtlige tabeller i
> databasen, og outputtet er et udtræk af felter + indhold.
>
> Tekstfilen bør have samme struktur som tabellen, ellers mister du data,
> eller er der noget jeg misforstår?
Nej, det har du ikke, men jeg har fundet ud af, at rækkefølgen af data i mit
programs tekstfil ikke er den samme som i databasen og så tror jeg, at det
nemmeste er at bruge feltnavnene ved upload, da jeg så vidt jeg har forstået
da kan uploade i tilfældig rækkefølge.
Det var jeg også haft lavet, men fik så en fejlmelding, som jeg ikke har set
før.
Microsoft JET Database Engine '80040e10'
Parameter ?_1 has no default value.
Kode:
response.write "SQL='"+SQL+"'"&vbCrLf
response.flush
AdoCommandInsert.CommandText = sql
For RecordCounter = 1 to UBound(RecordArray)
Response.write "Loop:-"+ cStr(RecordCounter)+"-"
FieldArray = Split(RecordArray(RecordCounter),";")
For Counter = 1 to UBound(FieldArray)
response.write FieldArray(Counter)+";"
AdoCommandInsert(Counter) = FieldArray(Counter)
Next
if UBound(FieldArray) > 1 then AdoCommandInsert.Execute
response.write vbcrlf
Next
Udskriften fra ovenstående bliver således:
SQL='INSERT INTO SamletRegister VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
Loop:-1-- gør det ikke mere;1999;5;34;;;;;;;
Jeg har lavet koden tilbage til det oprindelige (så vidt jeg har kunnet se),
men får den stadigvæk.
Jeg leder videre efter årsagen!
>
> --
> Med venlig hilsen/Best regards
> Stig Johansen
Tak.
Kurt
| |
Stig Johansen (05-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 05-09-08 22:27 |
|
Kurt G wrote:
> Nej, det har du ikke, men jeg har fundet ud af, at rækkefølgen af data i
> mit programs tekstfil ikke er den samme som i databasen og så tror jeg, at
> det nemmeste er at bruge feltnavnene ved upload, da jeg så vidt jeg har
> forstået da kan uploade i tilfældig rækkefølge.
Se senere.
> Det var jeg også haft lavet, men fik så en fejlmelding, som jeg ikke har
> set før.
>
> Microsoft JET Database Engine '80040e10'
>
> Parameter ?_1 has no default value.
Parameter 1 svarer til nummer 2 ?, som igen er felt nummer 2 i din database.
> Response.write "Loop:-"+ cStr(RecordCounter)+"-"
.....
> Loop:-1-- gør det ikke mere;1999;5;34;;;;;;;
Jeg kan ikke lige greje hvorfor der står 2 - efter 1 tallet, er det en del
af teksten?
Men ud over det, så er den tabeldefinition vi bruger i demoen ikke den
samme.
Her starter den med År Nr Side, som alle er tal.
Kan det tænkes du forsøger at sætte tekst ind i tal, selvom fejlmeldingen er
en anden.
Men bortset fra det, så har jeg lavet et par opdateringer, som du kan finde
i zip filen.
1) Jeg har kapslet uploaden ind i en BeginTrans/CommitTrans, så data ikke
mistes ved fejl.
2) Ændret, så SQL'et nu benytter feltnavne fra overskriften i CSV filen.
Så er rækkefølgen uafhængig af tabelstrukturen.
Og lige en note:
Der er ingen sikkerhed i den demo, så alle kan hente/opdatere/'ødelægge'
data.
Du kan få et md5 'fif' hvis du har brug for det.
--
Med venlig hilsen
Stig Johansen
| |
Kurt G (06-09-2008)
| Kommentar Fra : Kurt G |
Dato : 06-09-08 07:56 |
|
---KLIP--->> Parameter ?_1 has no default value.
>
> Parameter 1 svarer til nummer 2 ?, som igen er felt nummer 2 i din
> database.
>
>> Response.write "Loop:-"+ cStr(RecordCounter)+"-"
> ....
>> Loop:-1-- gør det ikke mere;1999;5;34;;;;;;;
> Jeg kan ikke lige greje hvorfor der står 2 - efter 1 tallet, er det en del
> af teksten?
Den ene '-' er en del af titlen!
> Men ud over det, så er den tabeldefinition vi bruger i demoen ikke den
> samme.
> Her starter den med År Nr Side, som alle er tal.
> Kan det tænkes du forsøger at sætte tekst ind i tal, selvom fejlmeldingen
> er
> en anden.
Det er fordi jeg ikke har samme rækkefølge i tabellen som i txt-filen fra
programmet. Jeg havde downloadet fra tabellen og forsøgt upload en del af
det igen.
> Men bortset fra det, så har jeg lavet et par opdateringer, som du kan
> finde
> i zip filen.
> 1) Jeg har kapslet uploaden ind i en BeginTrans/CommitTrans, så data ikke
> mistes ved fejl.
> 2) Ændret, så SQL'et nu benytter feltnavne fra overskriften i CSV filen.
> Så er rækkefølgen uafhængig af tabelstrukturen.
Så slap jeg også for det!
> Og lige en note:
> Der er ingen sikkerhed i den demo, så alle kan hente/opdatere/'ødelægge'
> data.
Jeg regner med, at der skal laves noget med passwordbeskyttelse, hvordan det
så bliver!
> Du kan få et md5 'fif' hvis du har brug for det.
Jeg ved ikke lige, hvad md5 er for noget?
Mvh Kurt
| |
Stig Johansen (06-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 06-09-08 14:31 |
|
"Kurt G" <kurt_g@guldbaek.net> wrote in message
news:48c22bb4$0$90263$14726298@news.sunsite.dk...
> Jeg ved ikke lige, hvad md5 er for noget?
md5 er en envejs hashværdi af en given streng.
Jeg bruger eksempelvis denne her konstruktion til noget Demo:
if md5(Request.Form("md5")) <> "
781c9706be2601cd22c56d61a40e961c
" then Response.end
Det er ikke den aktuelle md5, men her en hash af strengen
"Kun_for_indviede"
md5 har i mange,mange år været en del af ICS pakken til Delphi, men da jeg
ikke gider at ASP-ifisere den har jeg hentet en funktion fra:
http://www.frez.co.uk
De skriver dog:
...........
You may not redistribute this code as a 'sample' or 'demo'.
...........
Så du må selv finde og hente den.
--
Med venlig hilsen/Best regards
Stig Johansen
| |
Jørn Andersen (06-09-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 06-09-08 15:52 |
|
On Sat, 6 Sep 2008 15:31:00 +0200, "Stig Johansen" <wopr.dk@gmail.com>
wrote:
>md5 er en envejs hashværdi af en given streng.
<snip>
>md5 har i mange,mange år været en del af ICS pakken til Delphi, men da jeg
>ikke gider at ASP-ifisere den har jeg hentet en funktion fra:
> http://www.frez.co.uk
>
>De skriver dog:
>..........
>You may not redistribute this code as a 'sample' or 'demo'.
>
>..........
>Så du må selv finde og hente den.
Takket være Jesper Stocholm ligger der en MD5-funktion på asp-faq.dk:
<url: http://www.asp-faq.dk/article/?id=52>
(og også en SHA-1, som skulle være lidt stærkere)
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
Stig Johansen (06-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 06-09-08 16:15 |
|
Jørn Andersen wrote:
> On Sat, 6 Sep 2008 15:31:00 +0200, "Stig Johansen" <wopr.dk@gmail.com>
> wrote:
>>..........
>>You may not redistribute this code as a 'sample' or 'demo'.
>>
>
> Takket være Jesper Stocholm ligger der en MD5-funktion på asp-faq.dk:
> <url: http://www.asp-faq.dk/article/?id=52>
Det er vist den samme.
Jeg er lidt i tvivl om det, at lægge den til download, er at 'redistribute'
eller ej.
> (og også en SHA-1, som skulle være lidt stærkere)
He - ja, den har større entropi, men det er vist kun for tør-teoritikere og
NSA
--
Med venlig hilsen
Stig Johansen
| |
Jørn Andersen (06-09-2008)
| Kommentar Fra : Jørn Andersen |
Dato : 06-09-08 17:04 |
|
On Sat, 06 Sep 2008 17:14:31 +0200, Stig Johansen <wopr.dk@gmaill.com>
wrote:
>> Takket være Jesper Stocholm ligger der en MD5-funktion på asp-faq.dk:
>> <url: http://www.asp-faq.dk/article/?id=52>
>
>Det er vist den samme.
>Jeg er lidt i tvivl om det, at lægge den til download, er at 'redistribute'
>eller ej.
Som jeg læser det, så er det med at "redistribute this code as a
'sample' or 'demo'" et soft statement.
De er mere klare i spyttet, når de skriver:
"It is expressly forbidden to sell or profit from this source code ..."
- så mon ikke det er hovedbudskabet?
Jeg ville ikke have betænkeligheder ved at inkludere den i noget kode
jeg skulle lave for andre.
>> (og også en SHA-1, som skulle være lidt stærkere)
>
>He - ja, den har større entropi, men det er vist kun for tør-teoritikere og
>NSA
Ja. Og desuden handler sikkerhed ikke kun om de enkelte komponenter, men
om det samlede setup
Mvh. Jørn
--
Jørn Andersen,
Brønshøj
| |
Kurt G (05-09-2008)
| Kommentar Fra : Kurt G |
Dato : 05-09-08 22:36 |
|
Med den sidste fil er der ingen problemer, jeg må have skrevet noget
forkert.
Nu vil jeg igen prøve at bruge feltnavnene i upload.
Mange tak!
Mvh Kurt
| |
Kurt G (06-09-2008)
| Kommentar Fra : Kurt G |
Dato : 06-09-08 11:22 |
|
"Stig Johansen" <wopr.dk@gmail.com> skrev i en meddelelse
news:48c16f00$0$90273$14726298@news.sunsite.dk...
> "Kurt G" <kurt_g@guldbaek.net> wrote in message
> news:48c0e2c3$0$90276$14726298@news.sunsite.dk...
>> "Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
>> news:48c00624$0$90275$14726298@news.sunsite.dk...
>> Efter at have rettet som foreskrevet, fik jeg fejlmelding om "Data type
>> mismatch in criteria expression."
>> Efter lidt eksperiementeren fandt jeg ud af, at databasen ikke kunne lide
> et
>> " ", når der intet tal var.
>
> Damned NULL's
-- KLIP --
> Med venlig hilsen/Best regards
> Stig Johansen
>
Det er ikke kun Null, der giver problemer.
Jeg hentede en anden tabel ned og uploadede igen, men databasen forstår
tilsyneladende ikke True og False.
Så erstattede jeg True med '1' i nogle records, og uploar virkede indtil
den igen mødte et True.
Min fejludskrift ser sådan ud:
Upload. SQL:'INSERT INTO Artikler(År ,Nr ,Side ,Forfatter ,Titel ,Link )
VALUES( ?, ?, ?, ?, ?, ? )'
Upload. Record:1. Data: 1957 1 3 Skalk skal melde nyt om gammelt
1
Upload. Record:2. Data: 1957 1 4 Det arkæologiske år 1957 1
Upload. Record:3. Data: 1957 1 5 O.V. [Olfert Voss] ".efter deres
mor Vibrog" 1
Upload. Record:4. Data: 1957 1 8 Thorkild Ramskou [Lindholm Høje]
True
Microsoft JET Database Engine error '80040e07
Data type mismatch in criteria expression.
Kurt.asp, line 94
Koden er:
For RecordCounter = 1 to UBound(RecordArray)
Response.write "Upload. Record:"+cStr(RecordCounter) +". Data:"
response.flush
FieldArray = Split(RecordArray(RecordCounter),";")
For Counter = 0 to UBound(FieldArray)
if Len(FieldArray(Counter)) = 0 then
AdoCommandInsert(Counter).value = null
else
AdoCommandInsert(Counter).value = FieldArray(Counter)
end if
Response.write " "+FieldArray(Counter)+" "
response.flush
Next
Response.write vbCrLf
if RecordCounter < 100 then
if UBound(FieldArray) > 1 then AdoCommandInsert.Execute LINIE 94
end if
Next
En anden ting:
Ved andre tilfælde af fejl har databasen været tom, bortset fra de linier,
som er blevet uploadet fejlfri. Her ser det ud til, at der ikke er sket
noget med databasen overhovedet.
Det kunne jo tyde på, at intet er uploadet!
Kurt
| |
Stig Johansen (06-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 06-09-08 14:08 |
|
Kurt G wrote:
> Det er ikke kun Null, der giver problemer.
> Jeg hentede en anden tabel ned og uploadede igen, men databasen forstår
> tilsyneladende ikke True og False.
> Så erstattede jeg True med '1' i nogle records, og uploar virkede indtil
> den igen mødte et True.
Gør dig selv den tjeneste at holde dig fra Boolske værdier i databaser, det
giver kun bøvl og flere grå hår/skaldethed.
Nogle databaser forstår det, andre gør det ikke, nogle bruger 0/1, andre
0/-1 som ordinale værdier.
> if RecordCounter < 100 then
Husk lige at fjerne denne her. Den er lagt ind af hensyn til eventuelle
vandaler.
> En anden ting:
> Ved andre tilfælde af fejl har databasen været tom, bortset fra de linier,
> som er blevet uploadet fejlfri. Her ser det ud til, at der ikke er sket
> noget med databasen overhovedet.
> Det kunne jo tyde på, at intet er uploadet!
Hvis du bruger den sidste inkarnation med BeginTrans/CommitTrans, så betyder
det, at samtlige ændringer fra BeginTrans til CommitTrans enten bliver
udført, eller ikke.
Da du får en fejl inden CommitTrans, 'abortes' alle ændringer - inklusive
DELETE FROM ... og forsøg på at indsætte nye værdier.
--
Med venlig hilsen
Stig Johansen
| |
Kurt G (06-09-2008)
| Kommentar Fra : Kurt G |
Dato : 06-09-08 22:12 |
|
"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:48c28122$0$90263$14726298@news.sunsite.dk...
---KLIP---
> Gør dig selv den tjeneste at holde dig fra Boolske værdier i databaser,
> det
> giver kun bøvl og flere grå hår/skaldethed.
Det vil jeg så gøre!
> Nogle databaser forstår det, andre gør det ikke, nogle bruger 0/1, andre
> 0/-1 som ordinale værdier.
>
>> if RecordCounter < 100 then
> Husk lige at fjerne denne her. Den er lagt ind af hensyn til eventuelle
> vandaler.
Jeg undrede mig godt nok over, hvorfor den var kommet med, men den bevirker
vel kun, at der ikke sendes med mindre der er mere end 100 poster?
>> En anden ting:
>> Ved andre tilfælde af fejl har databasen været tom, bortset fra de
>> linier,
>> som er blevet uploadet fejlfri. Her ser det ud til, at der ikke er sket
>> noget med databasen overhovedet.
>> Det kunne jo tyde på, at intet er uploadet!
>
> Hvis du bruger den sidste inkarnation med BeginTrans/CommitTrans, så
> betyder
> det, at samtlige ændringer fra BeginTrans til CommitTrans enten bliver
> udført, eller ikke.
>
> Da du får en fejl inden CommitTrans, 'abortes' alle ændringer - inklusive
> DELETE FROM ... og forsøg på at indsætte nye værdier.
>
> --
> Med venlig hilsen
> Stig Johansen
Det forklarer sagen.
Der er godt nok meget, man ikke ved noget om.
Tak for hjælpen!
Kurt
| |
Stig Johansen (06-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 06-09-08 22:44 |
|
Kurt G wrote:
> "Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
>>> if RecordCounter < 100 then
>
>> Husk lige at fjerne denne her. Den er lagt ind af hensyn til eventuelle
>> vandaler.
> Jeg undrede mig godt nok over, hvorfor den var kommet med, men den
> bevirker vel kun, at der ikke sendes med mindre der er mere end 100
> poster?
Ja, den her demo ligger online, og uden sikkerhed, så der vil max blive
oprettet 100 poster.
Man ved aldrig om der skulle være nogen, der synes det ville være sjovt at
oprette 1000-vis af poster.
--
Med venlig hilsen
Stig Johansen
| |
Kurt G (04-09-2008)
| Kommentar Fra : Kurt G |
Dato : 04-09-08 16:59 |
|
Der er noget i følgende kode, som jeg ikke helt begriber.
Jeg har nummereret linierne.
---KLIP---
' ----------------------- POST -------------------------
1 SQL = "DELETE FROM " + Tablename
2 oConn.Execute SQL ' delete table
3 Set AdoCommandInsert = Server.CreateObject ("ADODB.Command")
4 AdoCommandInsert.ActiveConnection = oConn
5 AdoCommandInsert.CommandType = adCmdText
6 RecordArray = Split(Request.Form("Tekstfil"),vbCrLf)
7 FieldArray = Split(RecordArray(0),";")
8 SQL = "INSERT INTO " + Tablename + " VALUES("
9 For Counter = 0 to UBound(FieldArray) - 1
10 SQL = SQL + " ?,"
11 Next
12 SQL = SQL + " ? )"
13 AdoCommandInsert.CommandText = sql
14 For RecordCounter = 1 to UBound(RecordArray)
15 FieldArray = Split(RecordArray(RecordCounter),";")
16 For Counter = 0 to UBound(FieldArray)
17 AdoCommandInsert(Counter) = FieldArray(Counter)
18 Next
19 AdoCommandInsert.Execute
20 Next
---KLIP---
I linie 6 og 7 dannes der et stort Array bestående af alle records og
felter.
Linie 8 starter sql-sætningen og linie 10 adderer '?,' til strengen for
hvert element i arrayet.
Hvordan kan det indsætte data i tabellen?
Mvh Kurt
| |
Stig Johansen (04-09-2008)
| Kommentar Fra : Stig Johansen |
Dato : 04-09-08 17:13 |
|
Kurt G wrote:
> Der er noget i følgende kode, som jeg ikke helt begriber.
> Jeg har nummereret linierne.
> ---KLIP---
> ' ----------------------- POST -------------------------
> 1 SQL = "DELETE FROM " + Tablename
> 2 oConn.Execute SQL ' delete table
> 3 Set AdoCommandInsert = Server.CreateObject ("ADODB.Command")
> 4 AdoCommandInsert.ActiveConnection = oConn
> 5 AdoCommandInsert.CommandType = adCmdText
>
> 6 RecordArray = Split(Request.Form("Tekstfil"),vbCrLf)
> 7 FieldArray = Split(RecordArray(0),";")
> 8 SQL = "INSERT INTO " + Tablename + " VALUES("
> 9 For Counter = 0 to UBound(FieldArray) - 1
> 10 SQL = SQL + " ?,"
> 11 Next
> 12 SQL = SQL + " ? )"
>
> 13 AdoCommandInsert.CommandText = sql
>
> 14 For RecordCounter = 1 to UBound(RecordArray)
> 15 FieldArray = Split(RecordArray(RecordCounter),";")
> 16 For Counter = 0 to UBound(FieldArray)
> 17 AdoCommandInsert(Counter) = FieldArray(Counter)
> 18 Next
> 19 AdoCommandInsert.Execute
> 20 Next
> ---KLIP---
>
> I linie 6 og 7 dannes der et stort Array bestående af alle records og
> felter.
Ja, men felterne er kun fra overskrifts linien (RecordArray(0)).
> Linie 8 starter sql-sætningen og linie 10 adderer '?,' til strengen for
> hvert element i arrayet.
Ja.
> Hvordan kan det indsætte data i tabellen?
Det er noget der hedder parameterized queries og/eller prepared statements.
Der sker det, at SQL'et bliver til
INSERT INTO SamletRegister ( ?,?,?...)
Hvert ? repræsenteret en parameter, som er et tilsvarende felt i databasen.
Linie 13:
> 13 AdoCommandInsert.CommandText = sql
Sender fysik SQL'et til databasen, der returnerer en parameterliste.
Når vi efterfølgende bruger dette prepared statement, skal parametrene kun
udskiftes - SQL'et er kendt i forvejen.
Linie 14:
> 14 For RecordCounter = 1 to UBound(RecordArray)
Looper igennem alle records efter overskriften.
Linie 16-18:
> 16 For Counter = 0 to UBound(FieldArray)
> 17 AdoCommandInsert(Counter) = FieldArray(Counter)
> 18 Next
Sætter parameter værdierne for hvert felt i den givne record.
Linie 19:
> 19 AdoCommandInsert.Execute
Udfører SQL'et med de aktuelle parametre (feltværdier).
--
Med venlig hilsen
Stig Johansen
| |
|
|