Андрей Зайцев
67 сообщений
#17 лет назад
Хочу на delphi 7 вставить запись в таблицу которая находится в Access 2003

procedure TForm2.Button1Click(Sender: TObject);
begin
form1.ADOQuery1.Active:=false;
form1.ADOQuery1.SQL.Text := 'INSERT INTO (login, password) VALUES ("dsa","dsa")';
form1.ADOQuery1.Active:=true;
end;

Помимо полей login и password есть еще поле id (Счетчик) и id_key (текстовое не обязательное)

B выдает ошибку : Ошибка синтаксиса INSERT INTO

В чем моя ошибка ?? подскажите пожалуйста :?:
Тест Тест
61 сообщение
#17 лет назад
пробовали без квадратных скобок?
Насколько я помню имя таблицы пишется без них.
Болатов А.
1090 сообщений
#17 лет назад
Неверно.
Я бы скорее посоветовал заменить двойные кавычки одинарными.
И почему для выполнения INSERT-запроса, который не возвращает данные, используется ADOQuery?
Владимир С.
581 сообщение
#17 лет назад
Query1.Active:= true
- равносильно query1.Open

для запросов на изменение данных использовать query1.ExecSQL;
Владимир С.
581 сообщение
#17 лет назад
'INSERT INTO  (login, password) VALUES ("dsa","dsa")'

в самом Access запрос успешно выполняется.
Андрей Зайцев
67 сообщений
#17 лет назад
Цитата ("f5lab"):
пробовали без квадратных скобок?
Насколько я помню имя таблицы пишется без них.

Пробовал не помогает
Андрей Зайцев
67 сообщений
#17 лет назад
Цитата ("alibek"):
Неверно.
Я бы скорее посоветовал заменить двойные кавычки одинарными.
И почему для выполнения INSERT-запроса, который не возвращает данные, используется ADOQuery?

Ковычки тоже менял тоже самое получается.
А насчет ADOQuery, что мне тогда использовать ?? если можно поподробней
Андрей Зайцев
67 сообщений
#17 лет назад
Вот нписал так :
procedure TForm2.Button1Click(Sender: TObject);
begin
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Add ('INSERT INTO registuser (login, password) VALUES (''dsaas'',''dsada''';
form1.ADOQuery1.ExecSQL;

И таже самая ошибка
Алексей Б.
897 сообщений
#17 лет назад
Попробуй
`login`, `password`
Андрей Зайцев
67 сообщений
#17 лет назад
Цитата ("lyoxa"):
Попробуй
`login`, `password`


Пробую так : INSERT INTO registuser (login, password) VALUES ('dsaas','dsada'
Выдает ошибку "Ошибка синтаксиса в инструкции INSER INTO"
Болатов А.
1090 сообщений
#17 лет назад
Обратные одинарные кавычки используются только в такой недобазе данных, как MySQL.
В Access и MS SQL используются квадратные скобки.
login и password не являются ключевыми словами Access, поэтому причина либо в кавычках, либо в способе вызова.
Алексей Б.
897 сообщений
#17 лет назад
Тогда попробуй
 (, )
Болатов А.
1090 сообщений
#17 лет назад
Этот код сохранить в файл vbs и запустить его.
Запись в БД добавляется?

Dim DBConnection
Set DBConnection = CreateObject("ADODB.Connection")
With DBConnection
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("User ID") = "Admin"
.Properties("Data Source") = "путь к базе данных"
.Open
End With
DBConnection.Execute "insert into (, ) values ('dsa','dsa')"
Андрей Зайцев
67 сообщений
#17 лет назад
Спасибо всем осебенно
Во рабочий варинт для insert into в Access :

form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text := 'INSERT INTO (, ) VALUES (''dsds'',''ddssada'')';
form1.ADOQuery1.ExecSQL;


Из за какохто скобочек столько волокиты
Андрей Зайцев
67 сообщений
#17 лет назад
Почему вот в этом коде :
form1.ADOQuery1.Close;
form1.ADOQuery1.SQL.Text := 'INSERT INTO (, ) VALUES ('+ form2.Edit1.Text +','+ form2.Edit2.Text +')';
form1.ADOQuery1.ExecSQL;

выдает ошибку : параметр edit1 не имеет значения по умолчанию ????
Алексей Б.
897 сообщений
#17 лет назад
form1.ADOQuery1.SQL.Text := 'INSERT INTO  (, ) VALUES ("'+ form2.Edit1.Text +'","'+ form2.Edit2.Text +'")';
Андрей Зайцев
67 сообщений
#17 лет назад
У меня вот так получилось
form1.ADOQuery1.Close;
form1.ADOQuery1.Parameters.ParamByName('ed1').Value:=form2.Edit1.Text;
form1.ADOQuery1.Parameters.ParamByName('ed2').Value:=form2.Edit2.Text;
form1.ADOQuery1.SQL.Text := 'INSERT INTO (, ) VALUES (:ed1,:ed2)';
form1.ADOQuery1.ExecSQL;


Но вот этот вариант конечно покароче ;)

form1.ADOQuery1.SQL.Text := 'INSERT INTO  (, ) VALUES ("'+ form2.Edit1.Text +'","'+ form2.Edit2.Text +'")';
Болатов А.
1090 сообщений
#17 лет назад
Добро пожаловать, уязвимость SQL.

Первый вариант правильный.
За второй вариант на собеседовании было бы однозначное "до свидания".
Алексей Б.
897 сообщений
#17 лет назад
Да я delphi в глаза не видел =)
и что там в form2.Edit1.Text понятия не имею.
Болатов А.
1090 сообщений
#17 лет назад
Да какая разница, дельфи это, PHP или бейсик? Я в дельфи тоже знаю только название.
Подстановка значений из текстового поля напрямую в запрос недопустима ни на каком языке.