Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 161
Записей в блоге: 1
1

Не выходит записать данные через SQL запрос

07.02.2013, 12:24. Просмотров 707. Ответов 9
Метки нет (Все метки)

в общем на синтаксис запроса ругаеться.. база данных на Аксесе написана.. а сам текст как я понял из исходника под другую базу.. и вот понять что не так не могу
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
procedure TForm1.Button2Click(Sender: TObject);
begin
if edit1.Text=' ' then exit;
q.sql.Clear;
q.SQL.Add('select*from Anketa where fam='+''''+Edit1.Text+'''');
q.SQL.Add('and imya='+''''+Edit2.Text+'''');
q.SQL.Add('and otchestvo='+''''+Edit3.Text+'''');
q.Open;
q.First;
if q.Eof=false then
begin
ShowMessage('Студент с такой фамилией, именем и отчеством уже существует');
exit;
end;
q.sql.Clear;
q.SQL.Add('select id_stud from anketa or derby id_stud');
q.Open;
q.Last;
edit8.Text:=IntToStr(q.Fields[0].Value+1);
q.sql.Clear;
q.SQL.Add('insert in to Anketa values(');
q.SQL.Add(''''+Edit1.Text+''''+',');//фамилия
q.SQL.Add(''''+Edit2.Text+''''+',');//имя
q.SQL.Add(''''+Edit3.Text+''''+',');//отчество
q.SQL.Add(''''+Edit4.Text+''''+',');//датарождения
q.SQL.Add(Edit8.Text+',');//idстудента
q.SQL.Add(Edit5.Text+')');//группа
try
q.ExecSQL;
except
edit8.Text:='';
ShowMessage('Немогу записать данные, проверте правильность ввода');
exit;
end;
ShowMessage('Запись добавлена');
 
end;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 12:24
Ответы с готовыми решениями:

Как в Delphi в отчете вывести данные которые берутся через SQL запрос
Здравствуйте))) Есть три таблицы:Заказ:Номер клиента,Номер заказа(ID)и т.д. и Детали:номер по...

Как передать данные из dataGridView1 в sql таблицу через запрос
Всем добрый день!!! Вопрос указан ниже, виде комментариев. Если кто то знает решение этой задачи,...

Запрос внешних данных через sql использовав данные из диапазона ячеек Excel
Доброго всем... Не нашёл конкретного решения на форуме, решил создать темку. Ближе к телу...есть...

Не выходит записать данные в массив
Добрый вечер! Привожу облегчённый фрагмент программы - лексического анализатор. Вобщем не могу...

DateTimePicker1 при вставке в Sql запрос выходит ошибка
при выборе даты (в основном) выходит ошибка. Видимо ошибка с форматом даты, но не пойму где. ...

9
Grossmeister
Модератор
3491 / 2529 / 440
Регистрация: 21.01.2011
Сообщений: 11,069
07.02.2013, 12:35 2
А я вообще твой SQL понять не могу.

И если в первом SELECT желательно добавить пробелы вокруг *, то во втором
не
SQL
1
SELECT id_stud FROM anketa OR derby id_stud
а
SQL
1
2
3
SELECT id_stud 
FROM anketa 
ORDER BY id_stud
В третьем не
SQL
1
'insert in to Anketa values(');
а
SQL
1
INSERT INTO Anketa VALUES(')
Неплохо бы изучить язык SQL, прежде чем работать с БД.

Ну и при динамическом формировании запроса желательно выводить его на экран перед посылкой, иначе трудно уловить, если где-то не хватает кавычки или еще чего.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 161
Записей в блоге: 1
07.02.2013, 14:36  [ТС] 3
да там пробелов вообще в исходнике не было.. поэтому возможно что не верно их выстовил увидел как по другому выставить и посмотрю пройдет или нет

Добавлено через 1 минуту
SQL
1
ORDER BY
вот в этом моменте я сомневался сильно с пробелом..

Добавлено через 1 час 56 минут
Все сделал заработало.
0
rdama
567 / 290 / 12
Регистрация: 28.01.2011
Сообщений: 1,326
07.02.2013, 15:19 4
Такая функция QuodedStr(). Ее можно пользовать вместо '''' + ''''.
И код легче читать.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 161
Записей в блоге: 1
08.02.2013, 16:24  [ТС] 5
Вот такой код еще.. проблема такая. ругается на значения edit5.. там названия группы к примеру АСО-09. Говорит АСО не имеет значение по умолчанию.. и так на все группы. и не отображает в сетке не чего и виснит. процедура поиска это.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit5.Text:='';
Edit8.Text:='';
q.SQL.Clear;
q.SQL.Add('select * from Anketa where fam='+''''+Edit1.Text+'''');
q.Open;
q.First;
if Q.Eof=true then
begin
ShowMessage('Данных об этом студенте нет');
exit;
end;
edit2.Text:=q.Fields[3].Value;
edit3.Text:=q.Fields[4].Value;
edit8.Text:=q.Fields[0].Value;
edit5.Text:=q.Fields[1].Value;
edit4.Text:=q.Fields[5].Value;
 
end;
Добавлено через 1 час 7 минут
еще я тут подумал что косяк может быть здесь..
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.TabSheet2Show(Sender: TObject);
begin
q.SQL.Clear;
if Edit5.Text='' then
begin
q.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество, data_rozd as Родился, id_gruppi as Группа from Anketa order by fam');
end
else
begin
q.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество,data_rozd as Родился');
q.SQL.Add('from Anketa where id_gruppi='+Edit5.Text);
q.SQL.Add('order by fam');
end;
q.Open;
 
end;

все исправил все заработало.. ток строчку группы не показывает.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.TabSheet2Show(Sender: TObject);
begin
q.SQL.Clear;
if Edit5.Text='' then
begin
q.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество, data_rozd as Родился, id_gruppi as Группа from Anketa order by fam');
end
else
begin
q.SQL.Add('select fam as Фамилия, Imya as Имя, Otchestvo as Oтчество,data_rozd as Родился');
q.SQL.Add('from Anketa where id_gruppi='+''''+Edit5.Text+'''');
q.SQL.Add('order by fam');
end;
q.Open;
 
end;
Добавлено через 23 часа 36 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
procedure TForm1.Button2Click(Sender: TObject);
begin
if edit1.Text=' ' then exit;
q.sql.Clear;
q.SQL.Add('select*from Anketa where fam='+''''+Edit1.Text+'''');
q.SQL.Add('and imya='+''''+Edit2.Text+'''');
q.SQL.Add('and otchestvo='+''''+Edit3.Text+'''');
q.Open;
q.First;
if q.Eof=false then
begin
ShowMessage('Студент с такой фамилией, именем и отчеством уже существует');
exit;
end;
q.sql.Clear;
q.SQL.Add('select id_stud from anketa or derby id_stud');
q.Open;
q.Last;
edit8.Text:=IntToStr(q.Fields[0].Value+1);
q.sql.Clear;
q.SQL.Add('insert in to Anketa values(');
q.SQL.Add(''''+Edit1.Text+''''+',');//фамилия
q.SQL.Add(''''+Edit2.Text+''''+',');//имя
q.SQL.Add(''''+Edit3.Text+''''+',');//отчество
q.SQL.Add(''''+Edit4.Text+''''+',');//датарождения
q.SQL.Add(Edit8.Text+',');//idстудента
q.SQL.Add(Edit5.Text+')');//группа
try
q.ExecSQL;
except
edit8.Text:='';
ShowMessage('Немогу записать данные, проверте правильность ввода');
exit;
end;
ShowMessage('Запись добавлена');
 
end;
помогите изменить структуру кода.. тут должны в теблицу добовляться значения едитов.. все кроме ИД.. потому что в аксесе они у меня автоматический задаються.. и вот не могу въехать че не то то..
0
mediv07
2 / 2 / 0
Регистрация: 07.12.2012
Сообщений: 17
08.02.2013, 16:52 6
Перед строкой
Pascal
1
q.ExecSQL;
выведи сообщение и выложи его, так будет наглядно видно селект, легче увидеть ошибку.
Pascal
1
ShowMessage(q.Sql.Text);
обрати внимание на строку
Pascal
1
q.SQL.Add('insert in to Anketa values(');
я с Access не работал, но Oracle into слитно пишется.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 161
Записей в блоге: 1
08.02.2013, 17:09  [ТС] 7
Project Project1.exe raised exception class EOleException with 'Не совподает число значений запроса и число результирующих полей '. Process stopped. Use Step or Run to continue
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.Button2Click(Sender: TObject);
begin
if edit1.Text=' ' then exit;
q.sql.Clear;
q.SQL.Add('select * from Anketa where fam='+''''+Edit1.Text+'''');
q.SQL.Add('and imya='+''''+Edit2.Text+'''');
q.SQL.Add('and otchestvo='+''''+Edit3.Text+'''');
q.Open;
q.First;
if q.Eof=false then
begin
ShowMessage('Студент с такой фамилией, именем и отчеством уже существует');
exit;
end;
q.sql.Clear;
q.SQL.Add('select id_studenta from anketa order by id_studenta');
q.Open;
q.Last;
edit8.Text:=IntToStr(q.Fields[0].Value+1);
q.sql.Clear;
q.SQL.Add('insert into Anketa values(');
q.SQL.Add(''''+Edit1.Text+''''+',');//фамилия
q.SQL.Add(''''+Edit2.Text+''''+',');//имя
q.SQL.Add(''''+Edit3.Text+''''+',');//отчество
q.SQL.Add(''''+Edit4.Text+''''+',');//датарождения
// q.SQL.Add(''''+Edit8.Text+''''+',');//idстудента 
{ не добовляем ид потому что он автоматический добовляеться в базе, счетчик}
q.SQL.Add(''''+Edit5.Text+''''+')');//группа
try
ShowMessage(q.Sql.Text);
q.ExecSQL;
except
edit8.Text:='';
ShowMessage('Немогу записать данные, проверте правильность ввода');
exit;
end;
ShowMessage('Запись добавлена');
 
end;
Добавлено через 2 минуты
а то место я исправил.. SQL запросы везде одинаково пишутся)
0
mediv07
2 / 2 / 0
Регистрация: 07.12.2012
Сообщений: 17
08.02.2013, 17:17 8
Сверь кол-во полей в таблице с кол-вом в селекте.
Судя по твоему коду у тебя 6 полей в таблице, 1 ключевое, которое генерируется, и
5 полей твоих Edit-ов.
1
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 161
Записей в блоге: 1
08.02.2013, 18:14  [ТС] 9
Цитата Сообщение от ghjuf Посмотреть сообщение
q.SQL.Add('select id_studenta from anketa order by id_studenta');
в этом месте?

Добавлено через 4 минуты
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
procedure TForm1.Button2Click(Sender: TObject);
begin
if edit1.Text=' ' then exit;
q.sql.Clear;
q.SQL.Add('select * from Anketa where fam='+''''+Edit1.Text+'''');
q.SQL.Add('and imya='+''''+Edit2.Text+'''');
q.SQL.Add('and otchestvo='+''''+Edit3.Text+'''');
q.Open;
q.First;
if q.Eof=false then
begin
ShowMessage('Студент с такой фамилией, именем и отчеством уже существует');
exit;
end;
q.sql.Clear;
q.SQL.Add('select id_studenta from anketa order by id_studenta');
q.Open;
q.Last;
edit8.Text:=IntToStr(q.Fields[0].Value+1);
q.sql.Clear;
q.SQL.Add('insert into Anketa (Fam,Imya,Otchestvo,Data_rozd,id_gruppi) values(');
q.SQL.Add(''''+Edit1.Text+''''+',');//фамилия
q.SQL.Add(''''+Edit2.Text+''''+',');//имя
q.SQL.Add(''''+Edit3.Text+''''+',');//отчество
q.SQL.Add(''''+Edit4.Text+''''+',');//датарождения
//q.SQL.Add(''''+Edit8.Text+''''+',');//idстудента
q.SQL.Add(''''+Edit5.Text+''''+')');//группа
try
ShowMessage(q.Sql.Text);
q.ExecSQL;
except
edit8.Text:='';
ShowMessage('Немогу записать данные, проверте правильность ввода');
exit;
end;
ShowMessage('Запись добавлена');
 
end;
вот сделал так.. пояснил какое поле исключили.. и все добавляет) долго думал..

Добавлено через 47 минут
Сдесь ругаеться на ид предмета.. что не имеет значение по умолчанию он..
ид предмета записываеться в таблице предметы.. этот ИД предмета связан
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.TabSheet3Show(Sender: TObject);
var
j:integer;
begin
listbox1.Clear;
listbox1.Items.Add('Оценки за'+FormatDateTime('dd.mm.yyyy',cal.Date));
j:=0;
q.SQL.Clear;
q.SQL.Add('select ocenka, id_predmet from uspevaemost where id_studenta='+''''+Edit8.Text+'''');
q.SQL.Add('and data_ocenki='+''''+FormatDateTime('mm.dd.yyyy',cal.Date)+'''');
q.SQL.Add('order by id_predmet');
q.Open;
q.First;
while Q.Eof=false do
begin
for j:=0 to length(predmet)-1 do if q.Fields[1].Value=ID_Predmet[j] then break;
listbox1.Items.Add(predmet[j]+'-'+IntToStr(q.Fields[0].Value));
q.Next;
end;
 
end;
ошибка такая:
Project Project1.exe raised exception class EOleException with 'Параметр id_predmet не имеет значения по умолчанию'. Process stopped. Use Step or Run to continue

Добавлено через 3 минуты
мало ли будут вопросы вот..
Delphi
1
2
3
4
5
6
7
8
var
  Form1: TForm1;
  Predmet:array of string;
ID_Predmet:array of integer;
 
implementation
 
{$R *.dfm}
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Procedure TForm1.Predmets;
var
i:integer;
begin
i:=0;
q.SQL.Clear;
q.SQL.Add('select * from Predmet order by id_predmet');
q.Open;
q.First;
while Q.Eof=false do
begin
SetLength(Predmet,i+1);
SetLength(id_predmet,i+1);
ID_Predmet[i]:=q.Fields[0].Value;
Predmet[i]:=q.Fields[1].Value;
combobox1.Items.Add(Predmet[i]);
inc(i);
q.Next;
end;
end;
0
ghjuf
9 / 9 / 0
Регистрация: 25.05.2011
Сообщений: 161
Записей в блоге: 1
11.02.2013, 23:42  [ТС] 10
с моментом ID_Predmta что то не то... вообще это счетчик в самой базе данных.
0
11.02.2013, 23:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 23:42

Не выходит получить данные из документа через Ole
Формирую в 1С такой запрос, проверей в Lotus отрабатывает на ура, а через OLE не в какую :angry: ...

Пытаюсь передать данные через Intent, но выходит ошибка
Пытаюсь передать данные через Intent, но выходит ошибка, когда пытаюсь передать число Вот, что...

Как записать данные в БД SQL
Всем привет.Новичок в этом деле..пытаюсь записать в SQL таблицу какие то данные и не хочет ни как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru