webForumDet fria alternativet

Skriva till databas

.NET

4 svar · 412 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej!
Jag har ett halvfärdigt script, som jag undrar om någon kan hjälpa mig med...

Det är en html-fil som innehåller vbscript. Filen i sig används i en windowsapplikation...

Allt fungerar, jag vill bara ha hjälp med att skriva till databasen.. :) .

Hade det varit en asp-fil hade jag klarat det... Men nu när det är vbscript, vet jag inte riktigt hur jag ska göra....

Här kommer iaf koden:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Registrera materialrader</title>
<link rel='stylesheet' href='././form.css' type='text/css'>
</head>

<%
	'*********************************
	'*********************************
	function InsertPriceListOptions()
		Dim objConn, objRS, sSQL
		dim s, sName, sPriceListNr, n
		
		Set objConn = CreateObject("ADODB.Connection")
		objConn.Open Application.sDbConnectionString
		Set objRs = CreateObject("ADODB.Recordset")
		
		sSQL = "SELECT * FROM [tblPricelist] WHERE [Nr] In('01','02','03','07','11') ORDER BY [Name]"
		objRS.Open sSQL, objConn
		
		s=""
		while not ObjRS.EOF
			sName=objRs("Name")
			n=InStr(sName, " (")
			if n>0 then sName = Left(sName, n-1)
			
			sPriceListNr = objRS("Nr")
			s = s & "<option value='" & sPriceListNr & "'>" & sName & "</option>" 
			objRS.Movenext
		wend

		objRS.Close
		Set objRS = Nothing
		objConn.Close
		Set objConn = Nothing

		InsertPriceListOptions=s
	end function

	'*********************************
	'*********************************
	function InsertMaterialRows()
		dim i, s
		
		s=""
		for i = 1 to 10
			s = s & "<tr>"
			s = s & "<td><label>Artikelnummer: <input name='article" & i & "' onkeyup='OnValidateArtNr(" & i & ")'></label></td>"

			s = s & "<td><label>Antal: "
			s = s & "<select name='amount" & i & "' id='amount" & i & "'>"
				for j = 1 to 100
					s = s & "<option value='" & j & "'>" & j & "</option>" & vbCrLf
				next
			s = s & "</select>"
			s = s & "</label></td>"

			s = s & "<td><label>Enhet: "
			s = s & "<select name='unit" & i & "'>"
				s = s & "<option value='st'>styck</option>"
				s = s & "<option value='m'>meter</option>"
			s = s & "</select>&nbsp;&nbsp;</td>"
			s = s & "<td><label id='artname" & i & "'>(ingen artikel vald)</label></td>"
			s = s & "</tr>"
		Next

		InsertMaterialRows = s
	end function
%>

<SCRIPT language='vbscript'>
	'*********************************
	' KOPIERAD FRÅN UN_GLOBAL.VBS:
	' Return a value from an SQL SELECT query to Uppdrag NU db
	'*********************************
	function GetUNValue(sSQL)
		dim Conn, Rs
		Set Conn=CreateObject("ADODB.Connection")
		Conn.Open "<% =Application.sDbConnectionString %>"
		Set Rs=CreateObject("ADODB.Recordset")
		Rs.Open sSQL, Conn
		if Rs.EOF then
			GetUNValue=""
		else
			GetUNValue=Rs.Fields(0)
		end If
		Rs.Close
		Set Rs=Nothing
		Set Conn=Nothing
	end function

	'*********************************
	'*********************************
	sub OnValidateArtNr(nIndex)
		dim sArtNr, sArtName
		dim sPLNr, sSupplierPrice

		sArtNr=document.all.item("article" & nIndex).value
		if sArtNr="" then 
			document.all.item("artname" & nIndex).innerHtml="(ingen artikel vald)"
			exit sub
		end if

		sArtName=GetUNValue("SELECT [Name] FROM [tblArticle] WHERE [Nr]='" & sArtNr & "'")
		sUnit=GetUNValue("SELECT [Unit] FROM [tblArticle] WHERE [Nr]='" & sArtNr & "'")
		if sArtName="" then 
			document.all.item("artname" & nIndex).innerHtml="<font color='#ff0000'>(felaktigt artikelnr)</font>"
		else
			sPLNr=document.all.item("supplier").value
			sSupplierPrice=GetUNValue("SELECT [Price] FROM [tblPrice] WHERE [PriceListNr]='" & sPLNr & "' AND [ArtNr]='" & sArtNr & "' AND [Type]=4 AND [FromAmount]=0")
			if sSupplierPrice="" then
				document.all.item("artname" & nIndex).innerHtml="<font color='#ff0000'>(artikeln finns ej hos vald leverantör)</font>"
			else
				document.all.item("artname" & nIndex).innerHtml=sArtName
				document.all.item("unit" & nIndex).value=sUnit
			end if
		end if
	end sub
	
	'*********************************
	'*********************************
	sub OnSave()
		dim i
		dim sArtNr, sAtrName, fAmount, sUnit, sPLNr, fPrice
		dim s
		dim CrLf : CrLf = Chr(13) & Chr(10)
	
		sPLNr=document.all.item("supplier").value

		s=""
		for i=1 to 10
			sArtNr=document.all.item("article" & i).value
			sArtName=document.all.item("artname" & i).innerhtml
			fAmount=document.all.item("amount" & i).value
			sUnit=document.all.item("unit" & i).value
			if sArtNr<>"" and lcase(Left(sArtName, 5))<>"<font" then
				fPrice=GetUNValue("SELECT TOP 1 [Price] FROM [tblPrice] WHERE [Type]=4 AND [PriceListNr]='" & sPLNr & "' AND [ArtNr]='" & sArtNr & "' AND [FromAmount]<=" & fAmount & "ORDER BY [FromAmount] DESC")
				if not IsNumeric(fPrice) then fPrice=0
				s = s & fAmount & " " & sUnit & " av artikelnr " & sArtNr & ", pris " & fPrice & " kr" & Chr(13) & Chr(10)
			end if
		next
		if s<>"" then
			r=MsgBox("Följande materialrader kommer att registreras: " & CrLf & CrLf & s , 1, "Skapa materialrader")
			if r<>1 then exit sub
		else
			call MsgBox("Det finns inga godkända materialrader som kan skapas.", 0, "Fel")
		end if
	end sub
</SCRIPT>

<body bgcolor='#<COLOR_3DFACE>'>

<h1>Registrera materialrader för uppdrag: <% =GetUNValue("SELECT [TaskNr] FROM [tblTask] WHERE [Id]=<TaskId>") %></h1>

<form name='myform' action="javascript:OnSave()" method="post">

<label>Välj leverantör: 
<select name='supplier'><% =InsertPriceListOptions() %></select>
</label>
<p>
<table border='0'>
<% =InsertMaterialRows() %>
</table>
<input name="addArticles" type="submit" value="Lägg till">
</form>
</body>
</html>

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#2

Vad är det som skall skrivas till db:n (inkl. tabell- och kolumnnamn)?

Medlem sedan jan. 20013 582 inlägg
#3

Hepp! :)

tabellen heter:

tblMaterial
*TaskId (variabel: <TaskId> rad 166 Detta är en specialare som windowsapplikationen skapar)
*ArtNr (variabel: sArtNr)
*ArtName (variabel: sArtName)
*Amount (variabel: fAmount)
*Unit (variabel: sUnit)
*PricelistNr (variabel: sPLNR)
*Price (variabel: fPrice)

Mvh
Henrik

Medlem sedan dec. 20025 483 inlägg
#4

Det bör väl kunna se ut som så här då:

s=""
strValues = ""
for i=1 to 10
  sArtNr=document.all.item("article" & i).value
  sArtName=document.all.item("artname" & i).innerhtml
  fAmount=document.all.item("amount" & i).value
  sUnit=document.all.item("unit" & i).value
  if sArtNr<>"" and lcase(Left(sArtName, 5))<>"<font" then
    fPrice=GetUNValue("SELECT TOP 1 [Price] FROM [tblPrice] WHERE [Type]=4 AND [PriceListNr]='" & sPLNr & "' AND [ArtNr]='" & sArtNr & "' AND [FromAmount]<=" & fAmount & "ORDER BY [FromAmount] DESC")
    if not IsNumeric(fPrice) then fPrice=0
    s = s & fAmount & " " & sUnit & " av artikelnr " & sArtNr & ", pris " & fPrice & " kr" & Chr(13) & Chr(10)
    [red]strValues = strValues & "(<TaskId>,'"&sArtnr&"','"&sArtName&"',"&fAmount&",'"&sUnit&"','"&sPLNr&"',"&fPrice&"),"[/red]
  end if
next
strValues = left(strValues,len(strValues)-1)
if s<>"" then
  r=MsgBox("Följande materialrader kommer att registreras: " & CrLf & CrLf & s , 1, "Skapa materialrader")
  if r<>1 then exit sub
  set conn = createobject("adodb.connection")
  conn.open Application.sDbConnectionString
  sql = "insert into tblMaterial (taskid,artnr,artname,amount,unit,pricelistnr,price) " &_
      "values " & strValues
  conn.execute(sql)
  conn.close
  set conn = nothing
else

Den rad som är rödmarkerad kanske måste ses över, men det märker du ;)

Medlem sedan jan. 20013 582 inlägg
#5

Men weee.. :) såg inte detta förrän idag...

Ska se om jag hinner testa i kväll.. :)

//Henrik

273 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
145 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)