Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2012, 04:27   #1
Gsingle
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 19
Вопрос Добавление данных в access.ошибка.

Здравствуйте всем кто читает форум, дает советы и так далее. как бы долго и принципиально не искал в общем то ответы на свои вопросы, я так и не нашел..Решил изложить в общем свою проблему сюда.
есть Таблица Patients со своими данными это Регистрационный номер, ФИО, Адрес, Дата рождение, Телефон. решил добавить через edit данные в таблицу.
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
with Form1.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into [Patients]([Registr_nomer],[FIO],[Adress],[Date_of_birth],[Telefon])');
SQL.Add('Values (:Reg),(:FIO),(:Adres),(:Date_b),(:Tel)');
SQL.Add('SELECT [Patients.Registr_nomer],[Patients.FIO],[Patients.Adress],[Patients.Date_of_birth],[Patients.Telefon]');
Sql.Add('FROM [Patients]');
Parameters.ParamByName('Reg').Value := Edit1.Text;
Parameters.ParamByName('FIO').Value := Edit2.Text;
Parameters.ParamByName('Adres').Value := Edit3.Text;
Parameters.ParamByName('Date_b').Value := Edit4.Text;
Parameters.ParamByName('Tel').Value := Edit5.Text;
ExecSQL;
end;
end;
выдает ошибку..Не совпадает число значений запроса и число результирующих полей..в чем может быть проблема?
Gsingle вне форума Ответить с цитированием
Старый 19.03.2012, 04:37   #2
Bit_Man
Пользователь
 
Регистрация: 11.03.2012
Сообщений: 29
По умолчанию

Попробуй сначала вставить, а потом открыть. Типа так
Код:
with Form1.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into [Patients]([Registr_nomer],[FIO],[Adress],[Date_of_birth],[Telefon])');
SQL.Add('Values (:Reg),(:FIO),(:Adres),(:Date_b),(:Tel)');
Parameters.ParamByName('Reg').Value := Edit1.Text;
Parameters.ParamByName('FIO').Value := Edit2.Text;
Parameters.ParamByName('Adres').Value := Edit3.Text;
Parameters.ParamByName('Date_b').Value := Edit4.Text;
Parameters.ParamByName('Tel').Value := Edit5.Text;
ExecSQL;
Close;
SQL.Clear;
SQL.Add('SELECT [Patients.Registr_nomer],[Patients.FIO],[Patients.Adress],[Patients.Date_of_birth],[Patients.Telefon]');
Sql.Add('FROM [Patients]');
Parameters.ParamByName('Reg').Value := Edit1.Text;
Parameters.ParamByName('FIO').Value := Edit2.Text;
Parameters.ParamByName('Adres').Value := Edit3.Text;
Parameters.ParamByName('Date_b').Value := Edit4.Text;
Parameters.ParamByName('Tel').Value := Edit5.Text;
Open;


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 19.03.2012 в 09:15.
Bit_Man вне форума Ответить с цитированием
Старый 19.03.2012, 09:20   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в принципе Bit_Man прав.
только для внесения данных и для получения выборки лучше использовать РАЗНЫЕ Query !

и ещё. зачем задавать параметры (я про выборку) если их нет в запросе.
Если не ошибаюсь - будет ошибка!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.03.2012, 10:17   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В тексте выражения:
Код:
SQL.Add('Values (:Reg),(:FIO),(:Adres),(:Date_b),(:Tel)');
синтаксическая ошибка (и не одна), на которую реагирует анализатор ("Не совпадает число ...").
Должно быть так:
Код:
SQL.Add('Values (:Reg,:FIO,:Adres,:Date_b,:Tel)');
Прик вне форума Ответить с цитированием
Старый 20.03.2012, 00:06   #5
Gsingle
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 19
По умолчанию

Всем спасибо за ответы.Помогло. А как насчет обновления в DBGride после добавления записи?..после перезапуска программы добавленная запись появляется а до этого никак.. вот у мя есть кнопка Войти. После ее нажатия появляется форма 2 в котором и есть вся таблица.
после перелопачивания форумов и не нахождения точного ответа, решил сделать так...

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
with Form1.ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT [Patients.Registr_nomer],[Patients.FIO],[Patients.Adress],[Patients.Date_of_birth],[Patients.Telefon] FROM [Patients]');
Open;
end;
end;
все равно не работает..пытался через
Код:
ADOQuery2.Active:= false;
ADOQuery2.Active:= true;
тоже никак. может кто подскажет а народ?..
Gsingle вне форума Ответить с цитированием
Старый 21.03.2012, 01:59   #6
Gsingle
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 19
По умолчанию

P.s. народ сам нашел решение. думаю кому то может это помочь..
Только сразу объясняю ситуацию..Есть Форма 1 и Форма 2. В форме 2 соединение с Бд:ADODataset,ADOConnection,DataSou rce и DBgrid и DBNavigator.
Форма 1.Там есть Кнопка Добавить,Войти и Выход.
Прописав кнопку Добавить вот так:
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
with Form1.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into [Patients]([Registr_nomer],[FIO],[Adress],[Date_of_birth],[Telefon])');
SQL.Add('Values (:Reg,:FIO,:Adres,:Date_b,:Tel)');
Parameters.ParamByName('Reg').Value := Edit1.Text;
Parameters.ParamByName('FIO').Value := Edit2.Text;
Parameters.ParamByName('Adres').Value := Edit3.Text;
Parameters.ParamByName('Date_b').Value := Edit4.Text;
Parameters.ParamByName('Tel').Value := Edit5.Text;
ExecSQL;
SQL.Clear;
Form2.ADODataSet1.Active:=false;
SQL.Add('select [Patients.Registr_nomer],[Patients.FIO],[Patients.Adress],[Patients.Date_of_birth],[Patients.Telefon] FROM [Patients]');
Form2.ADODataSet1.Active:=true;
open;
end;
end;
мы захотим Войти в форму 2 где БД.
Прописываем кнопку Войти:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
with Form1.ADOQuery2 do
begin
close;
SQL.Clear;
Form2.ADODataSet1.Active:=false;
SQL.Add('select [Patients.Registr_nomer],[Patients.FIO],[Patients.Adress],[Patients.Date_of_birth],[Patients.Telefon] FROM [Patients]');
Form2.ADODataSet1.Active:=true;
open;
end;
end;
Буду рад если мой код хоть кому то поможет и Всем спасибо)...если что свои наблюдения буду сюда кидать.
P.s.s. Модератор можно ли кидать именно сюда свои наблюдения?..
Gsingle вне форума Ответить с цитированием
Старый 21.03.2012, 09:26   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
P.s.s. Модератор можно ли кидать именно сюда свои наблюдения?..
я бы даже сказал - "нужно".
Ведь темы с форума просто так не удаляются,
вполне ваш опыт и советы могут кому-то пригодится!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.03.2012, 10:06   #8
Gsingle
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я бы даже сказал - "нужно".
Ведь темы с форума просто так не удаляются,
вполне ваш опыт и советы могут кому-то пригодится!
Спасибо за ответ и за отклик...)
Gsingle вне форума Ответить с цитированием
Старый 21.03.2012, 15:52   #9
Gsingle
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 19
По умолчанию

Хм. у меня тут вопрос возник..короче Ключ и индекс Registr_nomer с таблицы Patient связан со связью один к одному с ключом и индексом Registr_nomer таблицы Med_card...Можно ли сделать так чтоб когда добавлялся регистрационный номер в Patients то этот же регистрационный номер добавлялся в Med_card? если нельзя то каким образом при добавление в Patients бд не ругалась и после проверки ввода второго такого же регистрационного номера добавлялось и туда и сюда?...в целом немножко запутанно но я пытался объяснить..ниже будет упрощенный вариант рассказа..
Patients.Registr_nomer(ключ и индекс) <-1-к-1-> Med_card.Registr_nomer(ключ и индекс)...
Gsingle вне форума Ответить с цитированием
Старый 21.03.2012, 16:24   #10
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Если в access есть механизм триггеров, то можно. Если нет, то добавлять идентификатор с тем же значением (где бы его взять?) в другую таблицу надо ручками.
Но чтобы не было искусственно создаваемых проблем, таблицы нужно объединить.
Цитата:
При связи «один к одному» одной строке родительской таблицы может соответствовать не более одной строки дочерней таблицы (и наоборот). Такая связь создается, если оба связанных столбца являются первичными ключами, обеспечивающее их уникальность. Связи этого типа встречаются редко, поскольку связанную подобным образом информацию обычно удается поместить в одной таблице.

А.В. МАРКИН. ПОСТРОЕНИЕ ЗАПРОСОВ И ПРОГРАММИРОВАНИЕ НА SQL. 2008 год
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при добавление данных в таблицу Access SQL le7o БД в Delphi 3 05.01.2012 12:16
Добавление данных dbf в таблицу Access s8259 Microsoft Office Access 3 08.09.2011 12:59
Добавление в ACCESS данных через SQL Rin БД в Delphi 2 17.05.2011 11:48
Что лучше организовать добавление данных? БД Access Choovak БД в Delphi 0 23.01.2011 19:39