2016-10-24 2 views
0

Я работаю с asp classic. Я пытаюсь взять информацию от пользователя, а затем вставить в мою базу данных.Вставить в sql заявление - asp classic - нет значения -

ошибка «значение не указано». on line: myCon.Execute (sql);

Я думаю, что это исходит из моего заявления sql.

var myCon, myRec, sql; 
myCon = new ActiveXObject ("ADODB.Connection"); 
myCon.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\abc.mdb"); 

var bodyType = parseInt(Request.Form("cbBodyType")); 
var education = parseInt(Request.Form("cbEducation")); 
var eyes = parseInt(Request.Form("cbEyes")); 
var hairs = parseInt(Request.Form("cbHairs")); 
var heights = parseInt(Request.Form("cbHeights")); 
var religion = parseInt(Request.Form("cbReligion")); 
var memberID = parseInt(Session("MemberID")); 

sql = "INSERT INTO Profiles (MemberID, Religion, HairColor, Eye, Education, Height, BodyType) VALUES ("+memberID+", "+religion+", "+hairs+", "+eyes+", "+education+", "+heights+", "+education+")"; 

myCon.Execute(sql); 
myCon.Close(); 

EDIT: Проблема есть логика. У меня есть, например, таблица HairColor с идентификатором и описанием. ID - это первичный ключ, а его внешний ключ - в профиле таблицы. Когда мой пользователь вводит информацию, я хотел бы восстановить значение combobox, получить идентификатор, а затем сделать INSERT INTO PROFILES.

Есть ли простой способ сделать это, вместо того чтобы использовать много «где утверждение»?

+0

сделать любую основную отладку, как выплевывая 'sql' строки, генерируемой увидеть, как это выглядит? и если вы пытаетесь вставить тип bodytype, почему вы указываете значение «education» для этого поля? –

+0

Я действительно отлаживал. Я разделил его и получил ту же ошибку. «нет значения» – NewPassionnate

+0

Я думаю, что это происходит из моих двойных котировок – NewPassionnate

ответ

0

Я думаю, что одна из следующих происходит:

  1. Один из столбцов, которые вы пытаетесь заполнить может быть строковым значением столбца. В этом случае, вы должны окружить значение аргумент в одинарных кавычках, так как в этом упрощенном-для-ясности примера ниже:

    sql = "INSERT INTO Profiles (MemberID, Religion) VALUES (" _   
         + memberID + ",'" + religion + "');" 
    
  2. В качестве альтернативы, если у вас есть - All - или Please Select опцию в верхней части и по умолчанию опции в одном из ваших комбинированных полей, и вы не указали значение для этого параметра, вы можете вернуть пустую/пустую строку в качестве значения. Это привело бы к этому, как в результате (упрощенный обмен на ясности) SQL:

    Sql = "INSERT INTO Profiles (MemberID, Religion) VALUES(235,);" 
    

    Обратите внимание на отсутствие значения для второго столбца. Я бы предположил, что вы получите сообщение об ошибке синтаксиса, хотя, если это то, что происходит.

Имейте в виду, что, делая ваш SQL таким образом, собирая строку из опубликованных значений, а не с использованием параметров SQL, вы открываете дверь для инъекции SQL атаки. Это не очень хорошая идея.

+0

Мои таблицы имеют идентификатор и описание. В моей форме я получаю значение «Описание». Но я думаю, что я только понял, где проблема: в моем заявлении INSERT INTO мне нужно получить ID Это имеет смысл? Есть ли простой способ сделать это? – NewPassionnate

+0

Как вы создаете теги HTML 'SELECT'? Можно указать описание и значение как отдельное вещи. Вот ссылка: h TTP: //www.w3schools.com/tags/tag_select.asp. Вы указываете свой ID для атрибута 'value' тега' option'. –

+0

Спасибо, что посмотрю. <Выберите имя = "cbHairs" ID = "cbHairs" размер = "1"> <% в то время как (! MyRecHR.EOF) {%> <% myRecHR.MoveNext(); }%> <% myRecHR.Close(); %> – NewPassionnate

0

Попробуйте использовать следующий вариант кода

myCon.Execute sql, 0 

(без скобок)