Avatar billede alexander_j Nybegynder
31. august 2003 - 13:03 Der er 23 kommentarer og
1 løsning

Databaseagtigt indhold i texfil!

Skrive til en textfil:
<%
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("../min_db_mappe/mintextfil.txt"
Set f = fso.OpenTextFile(filespec,2)
f.WriteLine Request("minvariabel")
f.Close
%>
Læse fra en textfil:
<%
Set fso = Server.CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("../min_db_mappe/mintextfil.txt"
Set f = fso.OpenTextFile(filespec,1)
Response.write f.ReadLine
f.Close
%>
Mere kan jeg ikke hvad ASP og textfiler angår!

Jeg har fået brug for følgende:
1. At gemme textvariabler parvis i ulige og lige linier
  linie1: navn1
  linie2: data1
  linie3: navn2
  linie4: data2
  etc.
2. Tjekke om navn allerede findes og i så fald slette denne og den efterfølgende linie!
3. Hente en liste over navnene
4. Hente data udfra et bestemt navn

Dette kan nemt gøres i en accessdatabase, men en eller anden fortalte mig engang at alt der kan lade sig gøre i access også kan gøres i textfiler - spørgsmålet er hvordan?
Avatar billede erikjacobsen Ekspert
31. august 2003 - 13:06 #1
Hvorfor vil du? Det er ikke nogen videre god løsning. Access har trods alt
den fordel, at den kan klare et antal samtidige brugere. Du får bare en masse bøvl
Avatar billede eagleeye Praktikant
31. august 2003 - 13:21 #2
Det er muligt at bruge en tekst fil som database:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;Extended Properties=""text;HDR=Yes;FMT=Delimited"""
Eller:
"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\txtFilesFolder\;Extensions=asc,csv,tab,txt;"

Eksempler:
http://users.drew.edu/skass/sql/TextDriver.htm
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q187/6/70.asp&NoWebContent=1

Her er noget at download men jeg ved ikke helt hvad det er:
http://downloads.zdnet.co.uk/downloads/detail/1002-2028-10138124.html


Men hvis man bruger den som database så kan du afligevel ikke få det format du selv ønsker også kan man lige så godt bruge en Access database fil.

Hvis det er for at få et bestemt output kan du jo lave noget kode som hendter data fra databasen og skriver tekst filen.
Avatar billede alexander_j Nybegynder
31. august 2003 - 13:52 #3
Ja hvorfor nu det - jo jeg har på fornemmelsen at data gemt i accessdatabasen fylder væsenligt mere end data i en textfil og desuden er access relativt langsom og ressourcekrævende for serveren!
Det jeg vil lave er ikke at lave et brugersystem, men en slags fildatasystem, hvor brugeren skal have lov til at gemme bestemte data(een variabel) under et bestemt navn - dette fildatasystem, har jeg brug for i flere forskellige sammenhænge - og derfor kan det blive pladskrævende med accessdatabaser på sigt!
Men det kan da godt være jeg må opgive mit forehavende - troede bare det var muligt - lige som det er muligt at lave et nyhedssystem i en textfil
Avatar billede alexander_j Nybegynder
31. august 2003 - 13:57 #4
Men hvordan gøres det så i en database?
Avatar billede eagleeye Praktikant
31. august 2003 - 14:03 #5
Jeg tror text-databasen er relativt langsomere end Access når man laver DELETE eller UPDATE's da text-dasen skal bruger FSO i et eller andent omfang.

Det kan da godt lade sig gøre at styre det med FSO, det kræver bare en masse kode at håndter filen og forskellig operationer eksemplevis Slette og Opdater en linje midt i filen (som ikke er direkte muligt med FSO). Til forskel er det en SQL sætning mod en database.



Du kan lave en tabel som indeholder navne og data

tabel: tabelnavn
id : autonummer
navn : tekst
data1 : tekst  eller notal alt efter hvor mange data man kan smide i.
Avatar billede eagleeye Praktikant
31. august 2003 - 14:10 #6
2. Tjekke om navn allerede findes og i så fald slette denne og den efterfølgende linie!

navn = "Hans"
SQL = "SELECT * FROM tabelnavn WHERE navn = '" & navn & "'"
Set rs = Connection.Execute(SQL)
if rs.EOF then
  'Bruger navnet findes IKKE.
else
  'Bruger navnet findes.
end if


3. Hente en liste over navnene

SQL = "SELECT navn FROM tabelnavn"
Set rs = Connection.Execute(SQL)
strNavne = rs.GetString(,-1,," ,")
if strNavne <> "" then strNavne = Left(strNavne,len(strNavne)-2)

Response.Write "Her en komma liste med navne : " & strNavne


4. Hente data udfra et bestemt navn

SQL = "SELET * FROM tabelnavn WHERE navn = '" & navn & "'"
Set rs = Connection.Execute(SQL)
if not rs.EOF then
  Response.Write rs("data")
end if
Avatar billede alexander_j Nybegynder
31. august 2003 - 14:15 #7
Ok og koden til forbindelse til databasen har jeg på plads nu mangler jeg bare:
1. Hente fuldstændig liste over elementer i 'navn'
2. Hente data udfra opgivet 'navn'
3. Gemme 'navn' og 'data' i ny post(eller overskrive hvis 'navn' er enslydende)
Hvis du gider hjælpe mig med det ville jeg være ovenud lykkelig!
Avatar billede alexander_j Nybegynder
31. august 2003 - 14:15 #8
Du er hurtig :-)
Avatar billede eagleeye Praktikant
31. august 2003 - 14:21 #9
Ok den 2 jeg har vist sletter ikke noget endnu. Faktisk kan man bare slette selv navnet ikke findes i tabellen det giver ikke en fejl.:

2. Tjekke om navn allerede findes og i så fald slette denne og den efterfølgende linie!

navn = "Hans"
SQL = "DELETE FROM tabelnavn WHERE navn '" & navn & "'"
Connection.Execte(SQL)



Den nye 3. Gemme 'navn' og 'data' i ny post(eller overskrive hvis 'navn' er enslydende)


strData = "Hej med dig min data er her"
navn = "Hans"
SQL = "SELECT * FROM tabelnavn WHERE navn = '" & navn & "'"
Set rs = Connection.Execute(SQL)
if rs.EOF then
  'Bruger navnet findes IKKE, indsæt
  SQL = "INSERT INTO tabelnavn (navn, data) VALUES ('" & navn & "', '" & strData & "')"
else
  'Bruger navnet findes, opdater
  SQL = "UPDATE tabelnavn SET data = '" & strData & "' WHERE navn = '" & navn & "'"
end if
Connection.Execute(SQL)

Så er data enten indsat eller opdateret.
Avatar billede alexander_j Nybegynder
31. august 2003 - 14:33 #10
3. hente liste
<%
    strDSN = "Data source=vejentilmindatabase.mdb;provider=Microsoft.jet.oledb.4.0;"
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open strDSN

    strSQL = "SELECT navn FROM mintabel"
    Set rs = Connection.Execute(SQL)
    strNavne = rs.GetString(,-1,," ,")
    if strNavne <> "" then strNavne = Left(strNavne,len(strNavne)-2)
    Response.Write "Her en komma liste med navne : " & strNavne

    myConn.Close
    Set myConn = Nothing
%>

Men den skriver intern serverfejl!
Avatar billede eagleeye Praktikant
31. august 2003 - 14:34 #11
Alle de steder jeg har skrevet  Connection  skal rettes til navet på din connection du har kaldt den myConn så prøv at rette Connection til myConn

    Set rs = myConn.Execute(SQL)
Avatar billede eagleeye Praktikant
31. august 2003 - 14:37 #12
For at få en bedre fejl kode/beskrivelse, så prøv at slå denne fra i IE:

funktioner -> internetindstillinger -> avanceret -> fjern kryds i "vis meddelelse om uskadelige http-fejl"
Avatar billede alexander_j Nybegynder
31. august 2003 - 14:37 #13
jep og SQL skal ændres til strSQL!
Avatar billede alexander_j Nybegynder
31. august 2003 - 14:50 #14
4. Hente data udfra navn:
<%
  strDSN = "Data source=vejentilmindatabase.mdb;provider=Microsoft.jet.oledb.4.0;"

  Set myConn = Server.CreateObject("ADODB.Connection")
  myConn.Open strDSN

  strSQL = "SELET * FROM mintabel WHERE navn = '" & Request("navn") & "'"
  Set rs = myConn.Execute(strSQL)
  if not rs.EOF then
      Response.Write rs("data1")
  end if

  myConn.Close
  Set myConn = Nothing
%>
intern fejl igen - kan du også greje den?
Avatar billede alexander_j Nybegynder
31. august 2003 - 14:52 #15
Avatar billede eagleeye Praktikant
31. august 2003 - 14:53 #16
Du skal skrive kolonnenavn i rs("KOLONNENAVN") så hedder kolonnen data1 ?

Response.Write rs("data1")
Avatar billede eagleeye Praktikant
31. august 2003 - 14:54 #17
Den fejl den kommer med er at filen minfilhent.asp ikke kan findes.:

The requested URL /minfilhent.asp was not found on this server
Avatar billede alexander_j Nybegynder
31. august 2003 - 14:58 #18
Avatar billede eagleeye Praktikant
31. august 2003 - 15:00 #19
Der mangler et C i SELECT i strSQL:

strSQL = "SELECT * FROM mintabel WHERE navn = '" & Request("navn") & "'"
Avatar billede alexander_j Nybegynder
31. august 2003 - 15:01 #20
perfekt
Avatar billede eagleeye Praktikant
31. august 2003 - 15:06 #21
Ok ;)
Skal jeg svare så?
Avatar billede alexander_j Nybegynder
31. august 2003 - 15:09 #22
Problemer med den sidste også :(
<%
  strDSN = "Data source=vejentilmindatabase.mdb;provider=Microsoft.jet.oledb.4.0;"

  Set myConn = Server.CreateObject("ADODB.Connection")
  myConn.Open strDSN

  strSQL = "SELECT * FROM mintabel WHERE navn = '" & Request("navn") & "'"
  Set rs = myConn.Execute(strSQL)
  if rs.EOF then
      strSQL = "INSERT INTO tabelnavn(navn, data1) VALUES ('" & Request("navn") & "', '" & Request("data1") & "')"
  else
      strSQL = "UPDATE tabelnavn SET data = '" & Request("data1") & "' WHERE navn = '" & Request("navn") & "'"
  end if
  myConn.Execute(strSQL)

  myConn.Close
  Set myConn = Nothing
%>

http://www.vestermarie-skole.dk/tegngem.asp?navn=AJ&data1=forsøg
Avatar billede eagleeye Praktikant
31. august 2003 - 15:12 #23
Der skal de to tabelnavn rettes til -> mintabel som du har kaldt tabellen, prøv sådan her:

<%
  strDSN = "Data source=vejentilmindatabase.mdb;provider=Microsoft.jet.oledb.4.0;"

  Set myConn = Server.CreateObject("ADODB.Connection")
  myConn.Open strDSN

  strSQL = "SELECT * FROM mintabel WHERE navn = '" & Request("navn") & "'"
  Set rs = myConn.Execute(strSQL)
  if rs.EOF then
      strSQL = "INSERT INTO mintabel (navn, data1) VALUES ('" & Request("navn") & "', '" & Request("data1") & "')"
  else
      strSQL = "UPDATE mintabel SET data1 = '" & Request("data1") & "' WHERE navn = '" & Request("navn") & "'"
  end if
  myConn.Execute(strSQL)

  myConn.Close
  Set myConn = Nothing
%>
Avatar billede alexander_j Nybegynder
31. august 2003 - 15:16 #24
Yahooo det virker - 1000 tak!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester