Avatar billede myanimalfarm Nybegynder
01. juli 2003 - 14:40 Der er 13 kommentarer og
1 løsning

insert med commands (stored procedure)

Er ved at lave en side der indsætter data i flere forskellige tabeller og nogle gange flere records i samme tabel. Siden får værdierne fra en helt almindelig formular på forrige side.
Problemet er at hvis et af felterne ikke er udfyldt svigter inserten, der kommer en fejl der siger:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/Admin/SalesCompanies/productlinetranslateinsert.asp, line 84

Det er vel bare en eller anden lille ting i koden der skal sige at hvis den ikke får nogen værdi fra den foregående side skal den ikke indsætte men hvordan?? er ikke så skarp til håndkodning.

Min kode:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!--#include file="../../Connections/Products.asp" -->
<%

if(Request.Form("ProductLineID") <> "") then Command1__LINE = Request.Form("ProductLineID")

if(Request.Form("ProductFamilyID") <> "") then Command1__FAM = Request.Form("ProductFamilyID")

if(Request.Form("ProductLineTName") <> "") then Command1__NAME = Request.Form("ProductLineTName")

if(Request.Form("ProductLineNumber") <> "") then Command1__NUMBER = Request.Form("ProductLineNumber")

if(Session("svCompanyID") <> "") then Command1__COM = Session("svCompanyID")

%>
<%

if(Session("svCompanyID") <> "") then Command2__COM = Session("svCompanyID")

if(Request.Form("ComponentDescriptionID1") <> "") then Command2__COMID = Request.Form("ComponentDescriptionID1")

if(Request.Form("ComponentTDescription1") <> "") then Command2__COMDES = Request.Form("ComponentTDescription1")

%>
<%

if(Session("svCompanyID") <> "") then Command3__COM = Session("svCompanyID")

if(Request.Form("ComponentDescriptionID2") <> "") then Command3__COMID = Request.Form("ComponentDescriptionID2")

if(Request.Form("ComponentTDescription2") <> "") then Command3__COMDES = Request.Form("ComponentTDescription2")

%>
<%

if(Session("svCompanyID") <> "") then Command4__COM = Session("svCompanyID")

if(Request.Form("ComponentDescriptionID3") <> "") then Command4__COMID = Request.Form("ComponentDescriptionID3")

if(Request.Form("ComponentTDescription3") <> "") then Command4__COMDES = Request.Form("ComponentTDescription3")

%>
<%

set Command1 = Server.CreateObject("ADODB.Command")
Command1.ActiveConnection = MM_CodanProducts_STRING
Command1.CommandText = "INSERT INTO 3ProductLineTranslation (ProducLineID, ProductFamilyID, ProductLineTName, ProductLineNumber, CompanyID)  VALUES ('" + Replace(Command1__LINE, "'", "''") + "', '" + Replace(Command1__FAM, "'", "''") + "', '" + Replace(Command1__NAME, "'", "''") + "', '" + Replace(Command1__NUMBER, "'", "''") + "', '" + Replace(Command1__COM, "'", "''") + "') "
Command1.CommandType = 1
Command1.CommandTimeout = 0
Command1.Prepared = true
Command1.Execute()

%>
<%

set Command2 = Server.CreateObject("ADODB.Command")
Command2.ActiveConnection = MM_CodanProducts_STRING
Command2.CommandText = "INSERT INTO 4ComponentDescriptionTranslated (CompanyID, ComponentDescriptionID, ComponentTDescription)  VALUES ('" + Replace(Command2__COM, "'", "''") + "', '" + Replace(Command2__COMID, "'", "''") + "', '" + Replace(Command2__COMDES, "'", "''") + "') "
Command2.CommandType = 1
Command2.CommandTimeout = 0
Command2.Prepared = true
Command2.Execute()

%>
<%

set Command3 = Server.CreateObject("ADODB.Command")
Command3.ActiveConnection = MM_CodanProducts_STRING
Command3.CommandText = "INSERT INTO 4ComponentDescriptionTranslated (CompanyID, ComponentDescriptionID, ComponentTDescription)  VALUES ('" + Replace(Command3__COM, "'", "''") + "', '" + Replace(Command3__COMID, "'", "''") + "', '" + Replace(Command3__COMDES, "'", "''") + "') "
Command3.CommandType = 1
Command3.CommandTimeout = 0
Command3.Prepared = true
Command3.Execute()

%>
<%

set Command4 = Server.CreateObject("ADODB.Command")
Command4.ActiveConnection = MM_CodanProducts_STRING
Command4.CommandText = "INSERT INTO 4ComponentDescriptionTranslated (CompanyID, ComponentDescriptionID, ComponentTDescription)  VALUES ('" + Replace(Command4__COM, "'", "''") + "', '" + Replace(Command4__COMID, "'", "''") + "', '" + Replace(Command4__COMDES, "'", "''") + "') "
Command4.CommandType = 1
Command4.CommandTimeout = 0
Command4.Prepared = true
Command4.Execute()

%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
</body>
</html>
Avatar billede dta Nybegynder
01. juli 2003 - 14:53 #1
if(Request.Form("ProductLineID") <> "") then Command1__LINE = Request.Form("ProductLineID")

Du checker for om feltet er tomt men der er ingen action hvis det er tomt. Du kunne f.eks lave en linie

if(Request.Form("ProductLineID") <> "") then
  Command1__LINE = Request.Form("ProductLineID")
else
  error = true
end if

Og inden du begynder din opdatering af databasen checke om Error er false.

Dette er i midlertidigt ikke særligt bruger venligt da du ikke fortæller brugeren hvor han laver fejl. Så du kunne lave chec på formularen ved hjælp af javascript. Den sidste er en større omskriv ning hvorimod den der bare giver fej er let at implementere men hvad skal den gøre efter visen den tomme form igen?
Avatar billede myanimalfarm Nybegynder
01. juli 2003 - 14:58 #2
Det handler om at nogle produkt linier har nogle komponenter. Det er imidlertid ikke sikkert at det er alle linier har 10 komponenter (der er 10 komponent felter på forrige side, har kun 3 med i koden indtilvidere) så derfor skal formularen virke selvom nogle felter er tomme, der skal bare ikke sættes noget ind i databasen.
Avatar billede myanimalfarm Nybegynder
01. juli 2003 - 15:01 #3
Det du taler om er vel bare validering med java right?? men det er jo ikke helt det, for felterne må jo i princippet gerne være tomme.
Avatar billede myanimalfarm Nybegynder
01. juli 2003 - 15:03 #4
eller vil det virke hvis tomme felter bare ikke bliver sendt videre til command siden?? kan man det med java??
Avatar billede dta Nybegynder
01. juli 2003 - 15:10 #5
Hvi de gerne må være tomme så skal du jo ikke checke om feltet er tomt med derimod sætte variablen lig den tomme værdi

Command1__LINE = Request.Form("ProductLineID") <<<<<< Ingen validering

eller

if(Request.Form("ProductLineID") <> "") then
  Command1__LINE = Request.Form("ProductLineID")
else
Command1__LINE = ""
end if
Avatar billede myanimalfarm Nybegynder
01. juli 2003 - 15:14 #6
AHA! prøver lige...
Avatar billede myanimalfarm Nybegynder
01. juli 2003 - 15:27 #7
Sådan her????

<%

if(Session("svCompanyID") <> "") then Command4__COM = Session("svCompanyID") else
Command4__COM = ""
end if

if(Request.Form("ComponentDescriptionID3") <> "") then Command4__COMID = Request.Form("ComponentDescriptionID3") else
Command4__COMID = ""
end if

if(Request.Form("ComponentTDescription3") <> "") then Command4__COMDES = Request.Form("ComponentTDescription3") else
Command4__COMDES = ""
end if

%>

synes ikke lige det virker...
Avatar billede dta Nybegynder
01. juli 2003 - 16:00 #8
MEd den ovestående kode ser det ud som om system ikke acceptere '' empty string elelr ikke på alle. Der er derfor denne mulighed

if(Request.Form("ComponentTDescription3") <> "") then
Command4__COMDES = "'" & Replace(Request.Form ("ComponentTDescription3"), "'", "''") & "'"
else
Command4__COMDES = "NULL"
end if

set Command4 = Server.CreateObject("ADODB.Command")
Command4.ActiveConnection = MM_CodanProducts_STRING
Command4.CommandText = "INSERT INTO 4ComponentDescriptionTranslated (CompanyID, ComponentDescriptionID, ComponentTDescription)  VALUES ('" + Command4__COM + "', '" + Replace(Command4__COMID, "'", "''") + "', '" + Replace(Command4__COMDES, "'", "''") + "') "
Command4.CommandType = 1
Command4.CommandTimeout = 0
Command4.Prepared = true
Command4.Execute()

Jeg har kun ændret koden for Command4_COM
Avatar billede myanimalfarm Nybegynder
02. juli 2003 - 09:37 #9
sådan her??

<%

if(Session("svCompanyID") <> "") then Command4__COM = Session("svCompanyID")

if(Request.Form("ComponentDescriptionID3") <> "") then Command4__COMID = "'" & Replace(Request.Form ("ComponentDescriptionID3"), "'", "''") & "'" else Command4__COMID = "NULL"

if(Request.Form("ComponentTDescription3") <> "") then Command4__COMDES = "'" & Replace(Request.Form ("ComponentTDescription3"), "'", "''") & "'" else Command4__COMDES = "NULL"

%>

får stadig samme fejl...gid jeg havde lært at håndkode, AK, er slave til DW!
Avatar billede dta Nybegynder
02. juli 2003 - 12:21 #10
Husk at du nu kun kan lade Commsnd 4 og 3 være tomme for at teste.

Prøv at lave en response.write på SQL sætningen for at checke om syntaxen er korrekt. Prøv evt at poste den så jeg kan se den.
Avatar billede myanimalfarm Nybegynder
02. juli 2003 - 13:45 #11
GISP! hvor er jeg dog bare dum blondine til det her.

Er det sådan her??

if(Request.Form("ComponentTDescription3") <> "") then Command4__COMDES = "'" & Replace(Request.Form ("ComponentTDescription3"), "'", "''") & "'" else Command4__COMDES = "NULL"
responce.write "FORKERT"
Avatar billede myanimalfarm Nybegynder
02. juli 2003 - 14:24 #12
hov havde stavet forkert!

<%

if(Session("svCompanyID") <> "") then Command4__COM = Session("svCompanyID")

if(Request.Form("ComponentDescriptionID3") <> "") then Command4__COMID = "'" & Replace(Request.Form ("ComponentDescriptionID3"), "'", "''") & "'" else Command4__COMID = "NULL"
response.write "FORKERT"

if(Request.Form("ComponentTDescription3") <> "") then Command4__COMDES = "'" & Replace(Request.Form ("ComponentTDescription3"), "'", "''") & "'" else Command4__COMDES = "NULL"
response.write "FORKERT"

%>

jeg får følgende:

FORKERTFORKERT
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

/Admin/SalesCompanies/productlinetranslateinsert.asp, line 95

Dvs. samme fejl, syntaxen er vel så korrekt siden den skriver FORKERT FORKERT???
Avatar billede myanimalfarm Nybegynder
04. juli 2003 - 10:13 #13
Har fundet ud af at jeg er en tumpe! Det er slet ikke ovenstående der er problemet. Gik siderne efter i sømmene og fandt ud af at det der skaber problemet er at der på forrige side er et hidden field som skal indsættes. Værdien til dette felt kommer fra databasen, men igen, det er ikke sikkert at den får en værdi, så hvis den ikke får en værdi skal den indsætte værdien 0 (lige nu melder den fejl i de tilfælde hvor ingen værdi bliver indsat). Skal jeg mon lave det som en function?? eller hvordan kan jeg ellers lave det?? poster lige et nyt spørgsmål om det...vil du i øvrigt ikke have nogle point for din hjælp???
Avatar billede myanimalfarm Nybegynder
30. juli 2003 - 15:24 #14
.
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