Αποστολή query σε πίνακα Sql Server

Πληροφορίες σχετικές με την ASP, ASP.NET και με τις εφαρμογές που είναι γραμμένες με αυτήν.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
nikpony
Δημοσιεύσεις: 104
Εγγραφή: 12 Ιούλ 2006 02:58

Αποστολή query σε πίνακα Sql Server

Δημοσίευση από nikpony » 28 Σεπ 2006 15:31

Φίλοι μου γεια σας! Θα ήθελα τη βοήθεια σας σε ένα μείζον πρόβλημα που αντιμετωπίζω τελευταία προσπαθώντας να φτιάξω μια φόρμα στην οποια θα συμπληρώνονται τα πεδία της και πατώντας αποστολή αυτά θα συμπληρώνουν τα ανάλογα columns σε ένα πίνακα μιας βάσης MSSql Server. 'Εκανα insert record επιλέγοντας το κουμπί της αποστολής και συμπλήρωσα ότι έπρεπε να συμπληρώσω.
Ο κώδικάς μου είναι αυτός
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/autoactive.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"))
If (Request.QueryString <> "") Then
MM_editAction = MM_editAction & "?" & Server.HTMLEncode(Request.QueryString)
End If

' boolean to abort record edit
MM_abortEdit = false

' query string to execute
MM_editQuery = ""
%>
<%
' *** Insert Record: set variables

If (CStr(Request("MM_insert")) = "form1") Then

MM_editConnection = MM_autoactive_STRING
MM_editTable = "dbo.xx_contracts"
MM_editRedirectUrl = "proposal.asp"
MM_fieldsStr = "dealer|value|edtCustName|value|edtAfm|value|edtDoy|value|edtAddress|value|edtTk|value|edtPhone|value|edtMobile|value|edtMail|value|edtOccupation|value|edtcarno|value|edtFrameNo|value|edtFirstLicenceDate|value|edtCarmake|value|edtCarModel|value|edtCC|value|edtEngineNo|value|edtKm|value|edtHP|value|edtStartDate|value|months|value|edtExpiryDate|value|gascard|value"
MM_columnsStr = "xx_contact_id|none,none,NULL|CUSTOMERName|',none,''|CUSTAFM|',none,''|DoyDescr|',none,''|CUSTADDRESS|',none,''|PostCode|',none,''|CUSTPHONE|',none,''|MobilePhone|',none,''|CustEmail|',none,''|Occupation|',none,''|CARNO|',none,''|FRAMENO|',none,''|CARREGDATE|',none,NULL|CARMAKECODEID|none,none,NULL|CARMODELCODEID|none,none,NULL|CARCC|none,none,NULL|EngineNo|',none,''|Km|',none,''|HP|none,none,NULL|STARTDATE|',none,NULL|Duration|none,none,NULL|EXPIRYDATE|',none,NULL|GasCard|',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

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(MM_editRedirectUrl)
End If
End If

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




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

' create the sql insert statement
MM_editQuery2 = "insert into xx_contracts"
'(STARTDATE,EXPIRYDATE,Duration,county,CUSTOMERName ,CUSTPMODECODEID,DoyDescr,CUSTAFM,CUSTADDRESS,CUSTAREA,CUSTCITY,CUSTPHONE,FILENO,CARNO,FRAMENO,CARMAKECODEID,CARMODELCODEID,CARUSAGECODEID,DRIVERLICENCEDATE,CARCC,HP,SEATS,CONSTRUCTIONYEAR, BM,BUYVALUE,LOANSTARTDATE,FINANCEMONTHS,datereg,usergroup,user_username,PostCode,MobilePhone,CustEmail,Occupation, EngineNo,Km,GasCard,CARREGDATE)' VALUES
'('2006/01/01','2007/01/01',1,2,'A',2,'A',3,'S15','S','A',4,1,'W',9,1,6,2,'01/06/99',1200,9,3,1995,2,2500,'03/06/02',24,'02/06/01',1,'A',12,61,'fr','O','S',120,1,'2003/05/01')'


If (Not MM_abortEdit) Then
' execute the insert
Set MM_editCmd = Server.CreateObject("ADODB.Command")
MM_editCmd.ActiveConnection = MM_autoactive_STRING
MM_editCmd.CommandText = MM_editQuery2

MM_editCmd.ActiveConnection.Close

If (MM_editRedirectUrl <> "") Then
Response.Redirect(MM_editRedirectUrl)
End If
End If

End If
%><!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-7" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.style1 {font-family: "Courier New", Courier, monospace}
-->
</style>
<link href="_CSS/global.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
.style2 {font-family: "Courier New", Courier, monospace; font-weight: bold; }
-->
</style>
</head>

<body>





<form ACTION="<%=MM_editAction%>" METHOD="POST" id="form1" name="form1">


<table width="831" border="1">
<tr>
<td bgcolor="#ff6600" colspan="6"><div align="center" class="title">&Alpha;&Iota;&Tau;&Eta;&Sigma;&Eta; &Alpha;&Sigma;&Phi;&Alpha;&Lambda;&Iota;&Sigma;&Eta;&Sigma; <strong>AUTOACTIVE</strong> </div></td>
</tr>
<tr>
<td colspan="6" bgcolor="#ff6600"><div align="center" class="style2">&Sigma;&Tau;&Omicron;&Iota;&Chi;&Epsilon;&Iota;&Alpha; &Alpha;&Nu;&Tau;&Iota;&Pi;&Rho;&Omicron;&Sigma;&Omega;&Pi;&Omicron;&Upsilon; </div></td>
</tr>
<tr>
<td>&Omicron;&Nu;&Omicron;&Mu;&Alpha;&Sigma;&Iota;&Alpha; &Alpha;&Nu;&Tau;&Iota;&Pi;&Rho;&Omicron;&Sigma;&Omega;&Pi;&Omicron;&Upsilon; </td>
<td colspan="5"><label>
<input name="dealer" type="text" id="dealer" size="80" />
</label></td>
</tr>
<tr>
<td bgcolor="#ff6600" colspan="6"><div align="center" class="style2"><u>&Sigma;&Tau;&Omicron;&Iota;&Chi;&Epsilon;&Iota;&Alpha; &Pi;&Epsilon;&Lambda;&Alpha;&Tau;&Eta;</u> </div></td>
</tr>
<tr>
<td width="100"><span class="style1">&Epsilon;&Pi;&Omega;&Nu;&Upsilon;&Mu;&Iota;&Alpha;</span></td>
<td width="207"><span class="style1">
<label>
<input name="edtCustName" type="text" id="edtCustName" size="40" />
</label>
</span></td>
<td width="86"><span class="style1">&Alpha;&Phi;&Mu;</span></td>
<td width="162"><span class="style1">
<label>
<input name="edtAfm" type="text" id="edtAfm" size="20" />
</label>
</span></td>
<td width="103"><span class="style1">&Delta;&Omicron;&Upsilon;</span></td>
<td><span class="style1">
<label>
<input name="edtDoy" type="text" id="edtDoy" size="25" />
</label>
</span></td>
</tr>
<tr>
<td><span class="style1">&Delta;&Iota;&Epsilon;&Upsilon;&Theta;&Upsilon;&Nu;&Sigma;&Eta;</span></td>
<td><span class="style1">
<label>
<input name="edtAddress" type="text" id="edtAddress" size="40" />
</label>
</span></td>
<td><span class="style1">&Nu;&Omicron;&Mu;&Omicron;&Sigma;/&Delta;&Eta;&Mu;&Omicron;&Sigma;</span></td>
<td><span class="style1">
<label>
<input name="edtCounty" type="text" id="edtCounty" size="20" />
</label>
</span></td>
<td><span class="style1">&Tau;&Kappa;</span></td>
<td width="133"><span class="style1">
<label>
<input name="edtTk" type="text" id="edtTk" size="25" />
</label>
</span></td>
</tr>
<tr>
<td><span class="style1">&Tau;&Eta;&Lambda;&Epsilon;&Phi;&Omega;&Nu;&Omicron;</span></td>
<td><span class="style1">
<label>
<input name="edtPhone" type="text" id="edtPhone" size="40" />
</label>
</span></td>
<td><span class="style1">&Kappa;&Iota;&Nu;&Eta;&Tau;&Omicron;
<label></label>
</span>
<label></label></td>
<td><input name="edtMobile" type="text" id="edtMobile" size="20" /></td>
<td><span class="style1">&Epsilon;&Mu;&Alpha;&Iota;L</span></td>
<td><input name="edtMail" type="text" id="edtMail" size="25" /></td>
</tr>
<tr>
<td><span class="style1">&Epsilon;&Pi;&Alpha;&Gamma;&Gamma;&Epsilon;&Lambda;&Mu;&Alpha;</span></td>
<td><span class="style1">
<input name="edtOccupation" type="text" id="edtOccupation" size="40" />
</span></td>
<td colspan="4"><span class="style1"></span><span class="style1"></span><span class="style1"></span><span class="style1"></span></td>
</tr>
<tr>
<td bgcolor="#ff6600" colspan="6"><div align="center" class="style2"><strong><u>&Sigma;&Tau;&Omicron;&Iota;&Chi;&Epsilon;&Iota;&Alpha; &Omicron;&Chi;&Eta;&Mu;&Alpha;&Tau;&Omicron;&Sigma; </u></strong></div></td>
</tr>
<tr>
<td>&Alpha;&Rho;&Iota;&Theta;&Mu;&Omicron;&Sigma; &Kappa;&Upsilon;&Kappa;&Lambda;. </td>
<td><span class="style1">
<input name="edtcarno" type="text" id="edtcarno" size="40" />
</span></td>
<td>&Alpha;&Rho;.&Pi;&Lambda;&Alpha;&Iota;&Sigma;&Iota;&Omicron;&Upsilon;</td>
<td><input name="edtFrameNo" type="text" id="edtFrameNo" size="32" /></td>
<td>&Eta;&Mu;\&Nu;&Iota;&Alpha; 1&eta;&sigmaf; &Alpha;&Delta;&Epsilon;&Iota;&Alpha;&Sigma; </td>
<td><input name="edtFirstLicenceDate" type="text" id="edtFirstLicenceDate" size="25" /></td>
</tr>
<tr>
<td>&Epsilon;&Rho;&Gamma;.&Kappa;&Alpha;&Tau;&Alpha;&Sigma;&Kappa;&Epsilon;&Upsilon;&Eta;&Sigma;</td>
<td><span class="style1">
<input name="edtCarmake" type="text" id="edtCarmake" size="40" />
</span></td>
<td>&Mu;&Omicron;&Nu;&Tau;&Epsilon;&Lambda;&Omicron;</td>
<td><input name="edtCarModel" type="text" id="edtCarModel" size="32" /></td>
<td>&Kappa;&Upsilon;&Beta;&Iota;&Kappa;&Alpha;</td>
<td><input name="edtCC" type="text" id="edtCC" size="25" /></td>
</tr>
<tr>
<td>&Alpha;&Rho;.&Kappa;&Iota;&Nu;&Eta;&Tau;&Eta;&Rho;&Alpha;</td>
<td><span class="style1">
<input name="edtEngineNo" type="text" id="edtEngineNo" size="40" />
</span></td>
<td>&Chi;&Iota;&Lambda;.&Epsilon;&Nu;&Delta;&Epsilon;&Iota;&Xi;&Eta;</td>
<td><input name="edtKm" type="text" id="edtKm" size="32" /></td>
<td>&Phi;&Omicron;&Rho;.&Iota;&Pi;&Pi;&Omicron;&Iota;</td>
<td><input name="edtHP" type="text" id="edtHP" size="25" /></td>
</tr>
<tr>
<td>&Epsilon;&Nu;&Alpha;&Rho;&Xi;&Eta; &Epsilon;&Gamma;&Gamma;&Upsilon;&Eta;&Sigma;&Eta;&Sigma; </td>
<td><label>
<input name="edtStartDate" type="text" id="edtStartDate" size="25" />
</label></td>
<td>&Mu;&Eta;&Nu;&Epsilon;&Sigma; &Pi;&Rho;&Omicron;&Gamma;&Rho;. </td>
<td><label>
<select name="months" size="1" id="months" onchange="myfunction('edtOccupation','edtExpiryDate')">
<option value="6">6 &Mu;&Eta;&Nu;&Epsilon;&Sigma;</option>
<option value="12">12 &Mu;&Eta;&Nu;&Epsilon;&Sigma;</option>
</select>
</label></td>
<td>&Lambda;&Eta;&Xi;&Eta; &Epsilon;&Gamma;&Gamma;&Upsilon;&Eta;&Sigma;&Eta;&Sigma; </td>
<td><input name="edtExpiryDate" type="text" id="edtExpiryDate" size="25" /></td>
</tr>
<tr>
<td></td>
<td></td>
<td>&Kappa;&Alpha;&Rho;&Tau;&Alpha; &Kappa;&Alpha;&Upsilon;&Sigma;&Alpha;&Epsilon;&Rho;&Iota;&Omega;&Nu; </td>
<td><label>
<select name="gascard" size="1" id="gascard">
<option selected="selected">&Nu;&Alpha;&Iota;</option>
<option>&Omicron;&Chi;&Iota;</option>
</select>
</label></td>
<td colspan="2">&nbsp;</td>
</tr>
</table>
<br />
<br />
<label>
<input name="send" type="submit" id="send" onclick='MM_editQuery2'
value="ΑΠΟΣΤΟΛΗ" />
</label>
<br />
<input type="hidden" name="MM_insert" value="form1">
</form>

<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</form>
</body>
</html>
και πατώντας αποστολή μου εμφανίζει στον explorer πως The page cannot be displayed και παρακάτω που εξηγεί ποιο είναι το σφάλμα λέει
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E57)
[Microsoft][ODBC SQL Server Driver][SQL Server]String or binary data would be truncated.
/autoactive/proposal.asp, line 115


Παρακαλώ πολύ δώστε μου τα φώτα σας.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Αποστολή query σε πίνακα Sql Server

Δημοσίευση από skeftomilos » 28 Σεπ 2006 23:24

Καλώς τον! :)

Αυτό το σφάλμα σημαίνει ότι ένα πεδίο του πίνακα έχει ανεπαρκές μέγεθος για να χωρέσει ένα μακρύ string. Π.χ. αν το πεδίο είναι nvarchar(50) και προσπαθήσεις να βάλεις string με 51 γράμματα ή περισσότερα.

Ο ευκολότερος και καλύτερος τρόπος αντιμετώπισης αυτού του προβλήματος (και όχι μόνο) είναι η χρήση παραμέτρων (ADODB.Parameter).
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

nikpony
Δημοσιεύσεις: 104
Εγγραφή: 12 Ιούλ 2006 02:58

Αποστολή query σε πίνακα Sql Server

Δημοσίευση από nikpony » 29 Σεπ 2006 01:43

Δοκιμαστικά δε βάζω τίποτα σε κανένα πεδίο και μου βγάζει αυτό το μήνυμα...παράλειψη μου να το αναφέρω.

Megistos
Δημοσιεύσεις: 149
Εγγραφή: 14 Ιουν 2005 15:38

Αποστολή query σε πίνακα Sql Server

Δημοσίευση από Megistos » 29 Σεπ 2006 12:07

Βασικά είναι λίγο δυσνόητος ο κώδικας του DW...

Το λάθος είναι καθαρά SQL πάντως, ακριβώς αυτό που λέει και ο skeftomilos. Τσέκαρε να δεις ακριβώς το query που πάει να εκτελέσει η σελίδα για να βεβαιωθείς ότι δεν πάει να γράψει περισσότερα data απ'όσα παίρνει κάποιο πεδίο.

Αν είσαι 100% σίγουρος ότι δεν είναι κάτι από αυτά, δεν ξέρω και τι έκδοση SQL Server έχεις, γιατί εάν θυμάμαι καλά, έπαιζε μέγιστο μέγεθος per record, αν και δεν το θεωρώ καθόλου πιθανό να έπιασες το όριο, δεν μπορώ να φανταστώ κάτι άλλο.
The Flame Still Burns

nikpony
Δημοσιεύσεις: 104
Εγγραφή: 12 Ιούλ 2006 02:58

Αποστολή query σε πίνακα Sql Server

Δημοσίευση από nikpony » 29 Σεπ 2006 12:51

Πες τε μου κάτι άλλο τουλάχιστον, μέσα απο το DW εκτός από το insert record στα server behaviors πρέπει να δηλώσω και τίποτα άλλο;π.χ στα bindings πρέπει να βάλω recordset με την insert και σε ποια πεδία να πηγαίνει αυτή;Γιατί το κάνω και αυτό και μου λέει όταν πάω να κάνω test τη σελίδα ότι σε μια γραμμή που λέει Command1.Execute() ότι Incorrect syntax near ')'.Μπορείτε να μου πείτε κάτι για αυτό;

nikpony
Δημοσιεύσεις: 104
Εγγραφή: 12 Ιούλ 2006 02:58

Αποστολή query σε πίνακα Sql Server

Δημοσίευση από nikpony » 29 Σεπ 2006 14:29

Ωπα μάγκες το φτιαξα.Το πρόβλημα ήτανε με τα menu/list items που είχα μέσα στη φόρμα και δεν ήτανε δηλωμένα σωστά..Ευχαριστώ πάντως.

Megistos
Δημοσιεύσεις: 149
Εγγραφή: 14 Ιουν 2005 15:38

Αποστολή query σε πίνακα Sql Server

Δημοσίευση από Megistos » 30 Σεπ 2006 13:00

Nice ;)
Πάντως σε γενικές γραμμές το Incorrect Syntax (και αναλόγως της βάσης πάντα) είναι λάθος όνομα πεδίου/table (αν και η .net το βγάζει σωστά αυτό), χρήση δεσμευμένης λέξης ή λάθος τύπος (π.χ. να βάζεις αλφαρηθμητικό σε αρηθμητικό πεδίο ή το αλφαρηθμητικό δεν είναι σε αυτάκια κ.λπ.).
The Flame Still Burns

Απάντηση

Επιστροφή στο “ASP, ASP.NET”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες