Avatar billede jmc Nybegynder
02. januar 2004 - 01:22 Der er 19 kommentarer og
1 løsning

hvordan execute en insert (dreamwaver MX kode)?

Jeg har et dokument som poster til et andet dokument som herefter skal performe et insert I en database. Jeg vil gerne benytte dreamweaver MX hele vejen. Hvordan kan jeg execute følgende i dokumentet jeg kalder?

' *** Insert Record: set variables
If (CStr(Request("MM_insert")) = "form1") Then

og længere nede kommer:

If (CStr(Request("MM_insert")) <> "") Then
  ' create the sql insert statement

Hvordan kan jeg exucute uden at skulle lave en submit?
Jeg har fundet ud af at returnere til forgående dokument igen. Jeg skal helst benytte dreamweaver til at lave koden med. Har du en ide?
Avatar billede thesurfer Nybegynder
02. januar 2004 - 01:44 #1
Hmm... du vil gerne indsæt nogle værdier, som skal hentes fra en form, uden at submitte?
Det kan du ikke.
Der skal enten submittes med POST (form) eller GET (url).
Avatar billede jmc Nybegynder
02. januar 2004 - 12:18 #2
Jeg submitter alle data fra doc1.asp til doc2.asp
Kender du dreamweaver?
Avatar billede thesurfer Nybegynder
02. januar 2004 - 14:04 #3
Jeg kender ikke dreamweaver (har dog hørt lidt om det)..
Men jeg ved hvordan man submitter data, og jeg programmerer i ASP.

Du skal have en form.. noget i stil med:

<form name="frmLogin" action="doc2.asp" method="post">
brugernavn <input type="text" name="brugernavn">
<br>
kodeord <input type="text" name="kodeord">
<input type="subtmit" value="Login">
</form>

Det er submit der sende værdierne af felterne, videre til doc2.asp.
Med POST sendes de via formen. Hvis du i stedet for POST bruger GET, vil urlen blive til:

doc2.asp?brugernavn=indeholdet_af_feltet_brugernavn&kodeord=indeholdet_af_feltet_kodeord
Avatar billede thesurfer Nybegynder
02. januar 2004 - 14:07 #4
Hvis du bruger POST, kan værdierne hentes med request.form("brugernavn") og request.form("kodeord").

Hvis du bruger GET, kan værdierne hentes med request.querystring("brugernavn") og request.querystring("kodeord").

Ved f.eks. login, bruges POST, så man ikke afslører værdierne, via urlen..
Avatar billede jmc Nybegynder
02. januar 2004 - 16:22 #5
alt dette ved jeg godt.
Det er sikkert bare at jeg fjerne den linie som hedder:
If (CStr(Request("MM_insert")) = "form1") Then
fra det default insert script som Dreamweaver generere.

Jeg prøver lige...
Avatar billede jmc Nybegynder
03. januar 2004 - 01:37 #6
efter at have udkommenteret det som skulle få scriptet executet kommer følgende fejl. Jeg skriver ' UDKOMMENTERES 3 steder!

Microsoft JET Database Engine error '80040e14'
Number of query values and destination fields are not the same.
/gn.asp, line 115


Jeg prøver at poste det hele, men linie 115 er der hvor SQL siger:    MM_editCmd.Execute

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../Connections/pt.asp" -->
<%
' *** Edit Operations: declare variables

Dim MM_editAction
Dim MM_abortEdit
Dim MM_editQuery
Dim MM_editCmd

Dim MM_editConnection
Dim MM_editTable
Dim MM_editRedirectUrl
Dim MM_editColumn
Dim MM_recordId

Dim MM_fieldsStr
Dim MM_columnsStr
Dim MM_fields
Dim MM_columns
Dim MM_typeArray
Dim MM_formVal
Dim MM_delim
Dim MM_altVal
Dim MM_emptyVal
Dim MM_i

MM_editAction = CStr(Request.ServerVariables("SCRIPT_NAME"))
' UDKOMMENTERES
'If (Request.QueryString <> "") Then
  MM_editAction = MM_editAction & "?" & Request.QueryString
'End If

' boolean to abort record edit
MM_abortEdit = false

' query string to execute
MM_editQuery = ""
%>
<%
' *** Insert Record: set variables
' UDKOMMENTERES
'If (CStr(Request("MM_insert")) = "form1") Then

  MM_editConnection = MM_persontest_STRING
  MM_editTable = "resultater"
  MM_editRedirectUrl = "sp.asp"
  MM_fieldsStr  = "sporgsmaal_id|value|bruger_id|value|resultat|value"
  MM_columnsStr = "sporgsmaal_id|none,none,NULL|bruger_id|none,none,NULL|resultat|',none,''"

  ' create the MM_fields and MM_columns arrays
  MM_fields = Split(MM_fieldsStr, "|")
  MM_columns = Split(MM_columnsStr, "|")
 
  ' set the form values
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_fields(MM_i+1) = CStr(Request.Form(MM_fields(MM_i)))
  Next

  ' append the query string to the redirect URL
  If (MM_editRedirectUrl <> "" And Request.QueryString <> "") Then
    If (InStr(1, MM_editRedirectUrl, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then
      MM_editRedirectUrl = MM_editRedirectUrl & "?" & Request.QueryString
    Else
      MM_editRedirectUrl = MM_editRedirectUrl & "&" & Request.QueryString
    End If
  End If

'End If
%>
<%
' *** Insert Record: construct a sql insert statement and execute it

Dim MM_tableValues
Dim MM_dbValues

' UDKOMMENTERES
'If (CStr(Request("MM_insert")) <> "") Then

  ' create the sql insert statement
  MM_tableValues = ""
  MM_dbValues = ""
  For MM_i = LBound(MM_fields) To UBound(MM_fields) Step 2
    MM_formVal = MM_fields(MM_i+1)
    MM_typeArray = Split(MM_columns(MM_i+1),",")
    MM_delim = MM_typeArray(0)
    If (MM_delim = "none") Then MM_delim = ""
    MM_altVal = MM_typeArray(1)
    If (MM_altVal = "none") Then MM_altVal = ""
    MM_emptyVal = MM_typeArray(2)
    If (MM_emptyVal = "none") Then MM_emptyVal = ""
    If (MM_formVal = "") Then
      MM_formVal = MM_emptyVal
    Else
      If (MM_altVal <> "") Then
        MM_formVal = MM_altVal
      ElseIf (MM_delim = "'") Then  ' escape quotes
        MM_formVal = "'" & Replace(MM_formVal,"'","''") & "'"
      Else
        MM_formVal = MM_delim + MM_formVal + MM_delim
      End If
    End If
    If (MM_i <> LBound(MM_fields)) Then
      MM_tableValues = MM_tableValues & ","
      MM_dbValues = MM_dbValues & ","
    End If
    MM_tableValues = MM_tableValues & MM_columns(MM_i)
    MM_dbValues = MM_dbValues & MM_formVal
  Next
  MM_editQuery = "insert into " & MM_editTable & " (" & MM_tableValues & ") values (" & MM_dbValues & ")"

  If (Not MM_abortEdit) Then
    ' execute the insert
    Set MM_editCmd = Server.CreateObject("ADODB.Command")
    MM_editCmd.ActiveConnection = MM_editConnection
    MM_editCmd.CommandText = MM_editQuery
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close

    If (MM_editRedirectUrl <> "") Then
      Response.Redirect("sp.asp?gruppe_id="&(CINT(request("gruppe_id")+1)))
    End If
  End If

'End If
%>
<%
Dim rs_sporgsmaal__MMColParam
rs_sporgsmaal__MMColParam = "1"
If (Request.QueryString("gruppe_id") <> "") Then
  rs_sporgsmaal__MMColParam = Request.QueryString("gruppe_id")
End If
%>
<%
Dim rs_sporgsmaal
Dim rs_sporgsmaal_numRows

Set rs_sporgsmaal = Server.CreateObject("ADODB.Recordset")
rs_sporgsmaal.ActiveConnection = MM_persontest_STRING
rs_sporgsmaal.Source = "SELECT * FROM sporgsmaal WHERE gruppe_id = " + Replace(rs_sporgsmaal__MMColParam, "'", "''") + ""
rs_sporgsmaal.CursorType = 0
rs_sporgsmaal.CursorLocation = 2
rs_sporgsmaal.LockType = 1
rs_sporgsmaal.Open()

rs_sporgsmaal_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
rs_sporgsmaal_numRows = rs_sporgsmaal_numRows + Repeat1__numRows
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<%
While ((Repeat1__numRows <> 0) AND (NOT rs_sporgsmaal.EOF))
%>
<%=(rs_sporgsmaal.Fields.Item("sporgsmaal_id").Value) & " " & (rs_sporgsmaal.Fields.Item("sporgsmaal").Value) & " " & request.form(rs_sporgsmaal.Fields.Item("sporgsmaal").Value)%>
<form name="form1" method="POST" action="<%=MM_editAction%>">
  <input name="sporgsmaal_id" type="hidden" id="sporgsmaal_id" value="<%=request.form(rs_sporgsmaal.Fields.Item("sporgsmaal_id").Value)%>">
  <input name="bruger_id" type="hidden" id="bruger_id" value="1">
  <input name="resultat" type="hidden" id="resultat" value="<%=request.form(rs_sporgsmaal.Fields.Item("sporgsmaal").Value)%>">
  <input type="hidden" name="MM_insert" value="form1">
</form>
<BR>
<%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rs_sporgsmaal.MoveNext()
Wend
%>

</body>
</html>
<%
rs_sporgsmaal.Close()
Set rs_sporgsmaal = Nothing
%>
Avatar billede thesurfer Nybegynder
03. januar 2004 - 14:36 #7
1)
Normalt hedder den:
"insert into TABELNAVN (FELTNAVN1, FELTNAVN2, osv..) values('VÆRDI1', 'VÆRDI2', 'VÆRDI osv..' )"

Dvs, det skal være noget i stil med:
MM_dbValues = "'" & MM_dbValues & "',"

Men du skal lige huske, at variablen skal ende med "'". Den må ikke ende med ",".

Jeg mener at fejlen "Number of query values and destination fields are not the same." betyder det antallet af felterne i "FELTNAVN" og værdierne i VÆRDI, ikke er den samme. De skal de være.

F.eks.: 3 felter og 3 værdier.. 47 felter og 47 værdier.

2)
Det du skal gøre nu, er at skrive:
response.write "SQL: " & MM_editQuery ' udskriver indholset af MM_editQuery
response.end ' stopper afviklingen af kode

Kig godt på det den skriver efter "SQL:". Du kan evt indsætte outputet her ind, så vi andre kankigge på det.

3)
Denne linie er overflødig, fordi VBScript er standard script sproget i asp:
<%@LANGUAGE="VBSCRIPT"%>

4)
Man bør ALTID bruge Option Explicit som den første linie i asp dokumentet. Og derefter skal ALLE variablerne defineres/dimmes.

F.eks.:

<%
Option Explicit
%>
<!--#include file="../Connections/pt.asp" -->
<%
dim MM_editQuery
dim MM_dbValues
' osv...

Følg punkterne, og svar på de spm der måtte være. Har du selv spm, er du velkommen til at stille dem.
Avatar billede jmc Nybegynder
03. januar 2004 - 16:44 #8
din response.write siger dette:
SQL: insert into resultater (sporgsmaal_id,bruger_id,resultat) values (1, 2, 3,1,'')

din oiption explisit siger følgende:
Microsoft VBScript runtime error '800a01f4'

Variable is undefined: 'MM_pt_STRING'
E:\bla\bla\WEB\../Connections/pt.asp, line 2
Avatar billede thesurfer Nybegynder
04. januar 2004 - 11:44 #9
Kan du se fejlen?
Du har 3 felter (sporgsmaal_id, bruger_id, resultat), med 5 værdier (1, 2, 3,1,'').
Det er kun tekst der skal have '' udenom.. så det er rigtigt nok..

Men du har stadig 3 felter og 5 værdier.. Det skal du lige have rettet..
Prøv et eksempel hvor du allerede kender felterne og værdierne. Ret koden til, så det passer.
Avatar billede jmc Nybegynder
04. januar 2004 - 20:52 #10
Jeg skriver nu: 

MM_fieldsStr  = "sporgsmaal_id|value|bruger_id|value|resultat|value"
MM_columnsStr = "sporgsmaal_id|bruger_id|resultat"

Jeg kender eller tre værdier
sporgsmaal_id
bruger_id
resultat

Jeg er blank for hvad jeg kan gøre....

Og dette giver fejlen:
Subscript out of range: '[number: 1]'
/go_next.asp, line 88

hvilket er    MM_altVal = MM_typeArray(1)
Avatar billede jmc Nybegynder
04. januar 2004 - 20:55 #11
Jeg har også prøvet:
  MM_fieldsStr  = "sporgsmaal_id|value|bruger_id|value|resultat|value"
  MM_columnsStr = "sporgsmaal_id|bruger_id|'resultat'"
men der fremkommer samme fejl.
Subscript out of range: '[number: 1]'
/go_next.asp, line 88
Avatar billede thesurfer Nybegynder
04. januar 2004 - 21:01 #12
hmm.. hvad er MM_fieldsStr og MM_columnsStr i databasen?

hvis du vil bruge en array, hvilket du åbenbart vil(?), skal du splitte strengen op med:

variabelnavn = split(MM_fieldsStr)
og
variabelnavn = split(MM_columnsStr)

Se evt: Arrays - http://html.dk/tutorials/asp/lektion8.asp
Avatar billede thesurfer Nybegynder
04. januar 2004 - 21:08 #13
nejnejnej.. :)
variabelnavn = split(MM_fieldsStr, "|")
og
variabelnavn = split(MM_columnsStr, "|")
Avatar billede jmc Nybegynder
05. januar 2004 - 00:19 #14
hummm
Det er jo også det der står I min kode som er vedlagt oven over:

  MM_fieldsStr  = "sporgsmaal_id|value|bruger_id|value|resultat|value"
  MM_columnsStr = "sporgsmaal_id|bruger_id|'resultat'"

  ' create the MM_fields and MM_columns arrays
  MM_fields = Split(MM_fieldsStr, "|")
  MM_columns = Split(MM_columnsStr, "|")
Avatar billede thesurfer Nybegynder
05. januar 2004 - 14:01 #15
Hvor er det helt præcis at den melder fejl?
Skriv:
- linie nr
- linie
- fejlmeddelelse (copy & paste)
- indhold af variabler

Prøv at indsætte Response.Buffer = False lige nede under Option Explicit.
Avatar billede jmc Nybegynder
06. januar 2004 - 01:16 #16
Selvom jeg skriver Response.Buffer = False lige nede under Option Explicit giver den fejlen:
Variable is undefined: 'MM_pt_STRING'
E:\bla\bla\WEB\../Connections/pt.asp, line 2

Nu slår jeg det fra og modtager fejlen:

Subscript out of range: '[number: 1]'
/go_next.asp, line 89

I linie 89 står der:   
MM_altVal = MM_typeArray(1)

TIDLIGERE STOD DER:
  MM_fieldsStr  = "sporgsmaal_id|value|bruger_id|value|resultat|value"
  MM_columnsStr = "sporgsmaal_id|none,none,NULL|bruger_id|none,none,NULL|resultat|',none,''"

som gav:
SQL: insert into resultater (sporgsmaal_id,bruger_id,resultat) values (1, 2, 3,1,'')

jeg kan ikke slette |none,none,NULL| uden at det giver en
Subscript out of range: '[number: 1]'
fejl!
Avatar billede jmc Nybegynder
24. maj 2005 - 14:56 #17
The surfer vil du ikke godt have de points, jeg har fundet ud af det. ;o)
Avatar billede thesurfer Nybegynder
24. maj 2005 - 18:21 #18
Du må godt få pointsne selv.. men skriv lige løsningen..
Avatar billede jmc Nybegynder
09. juni 2005 - 11:57 #19
jeg droppede og lavede det på en anden måde.
Avatar billede thesurfer Nybegynder
09. juni 2005 - 15:33 #20
Ang Option Explicit:
Option Explicit kræver at du "dimmer" alle dine variabler. Dvs, du skal skrive:

dim variabelnavn

Hvis du f.eks dimmer "cykel" som variabel, og kommer til at skrive "ckel" (mangler "y"), vil den skrive:

Variable is undefined: 'ckel'

Så kan du hurtigt se, at der er noget galt..

Eksempel (formatet er "linienummer" + "kolon" + "koden"):
1: cykel = 1
2: ckel = cykel + 1
3: response.write "antallet af cykler: " & cykel

Hvis der ikke var stavefejl, skulle den skrive "antallet af cykler: 2".
Men der er fejl, og Option Explicit vil fortælle dig, at der er fejl:

Variable is undefined: 'ckel'
drev\sti\mappe\fil.asp, line 2

Så burde du hurtigt kunne fange stavefejlen "ckel"

Meget smart, ik'..? :-)

/theSurfer
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