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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2015, 10:43   #1
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию Обновление БД посл запроса добавления

Здравствуйте. В приложении есть форма авторизации. Кнопка вход работает отлично. Проблема возникает при регистрации. Если зарегистрировать пользователя и тут же нажать вход выводится сообщение о том что пользователь не найден. Я так понимаю, что бд нужно как-то обновить. Только как?
Код:
//клик по кнопке вход
procedure TForm1.Button1Click(Sender: TObject);
begin
      if (Edit1.Text='') or (Edit2.Text='') then exit;
      ADOQuery1.Close;
      ADOQuery1.SQL.Text := 'SELECT Family FROM Users WHERE Nam=:prm';
      ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.Text, true);
            ADOQuery1.Parameters.ParamByName('prm').Value:=Edit1.Text;
      ADOQuery1.Open;
      if ADOQuery1.FieldByName('Family').AsString=Edit2.Text then
      begin
        Form2.Show;
        UserName:=Edit1.Text+' '+Edit2.text;
      end
      else
        ShowMessage('Пользователь не найден!');
end;
//клик по кнопке зарегистрировать
procedure TForm1.Button2Click(Sender: TObject);
begin
    ADOQuery1.Close;
    ADOQuery1.SQL.Add('insert into Users (Nam, Family)');
    ADOQuery1.SQL.Add( ' VALUES(:prm1,:prm2)');
    ADOQuery1.Parameters.ParamByName('prm1').Value:=Edit1.Text;
    ADOQuery1.Parameters.ParamByName('prm2').Value:=Edit2.Text;
    try
        ADOQuery1.ExecSql;
        showmessage('Пользователь зарегистрирован!');
    Except
      showmessage('Не удалось зарегистрировать пользователя!');
    end;
 
end;
Nickolay0512 вне форума Ответить с цитированием
Старый 22.09.2015, 11:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А если так:
Код:
if trim(ADOQuery1.FieldByName('Family').AsString)=Edit2.Text then
Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2015, 11:57   #3
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

Все равно говорит "Пользователь не зарегистрирован"

Вернее пользователь не найден

Последний раз редактировалось Stilet; 22.09.2015 в 12:34.
Nickolay0512 вне форума Ответить с цитированием
Старый 22.09.2015, 12:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

После жмака добавления посмотри в базу, сохранилось ли значение добавленное?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2015, 12:52   #5
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

Сохранилось
Nickolay0512 вне форума Ответить с цитированием
Старый 22.09.2015, 13:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

После ADOQuery1.Open; напиши:
Код:
ShowMessage(ADOQuery1.FieldByName('Family').AsString)
И посмотри что выведет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.09.2015, 13:36   #7
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

Хм, тогда работает как надо. Выводит фамилию и открывается новая форма. Не пойму в чем проблема
Nickolay0512 вне форума Ответить с цитированием
Старый 22.09.2015, 13:42   #8
Nickolay0512
Пользователь
 
Регистрация: 26.10.2013
Сообщений: 54
По умолчанию

Вместо ADOQuery1.Close; написал ADOQuery1.SQL.Clear; и заработало как надо. Не можете пояснить почему так?
Nickolay0512 вне форума Ответить с цитированием
Старый 22.09.2015, 14:36   #9
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,776
По умолчанию

Потому что, млин, компоненты запросов нужно или создавать динамически, раз уж хочется писать в них текст вручную, или класть на форму по одному компоненту на (параметризированный) запрос, чтобы не менять в них текст и не удивляться, почему.

К чему это крохоборство? Предположим, 5 запросов у тебя. Так положи пять компонентов на форму, впиши в каждый свой запрос! Что, программа сильно раздуется или у процессора транзисторы за триггеры зайдут? Нет, всё будет работать -- тихо и без глюков. Компоненты для того и кладут на форму, чтобы их можно было сколько нужно положить. Ты же не платишь за них поштучно!
Vapaamies вне форума Ответить с цитированием
Старый 22.09.2015, 14:41   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Вместо ADOQuery1.Close; написал ADOQuery1.SQL.Clear; и заработало как надо. Не можете пояснить почему так?
теперь верни все на место и ПЕРЕД ExecSQL выведи запрос(сделай так)
Код:
ShowMessage(ADOQuery1.SQL.Text);
ADOQuery1.ExecSql;
посмотри на него внимательно и пойми почему.
Для более полного понимания читаем про методы TStrings. Add | Text | Clear. можно здесь

Чтобы в дальнейшем не было такого лучше применять правило
для каждого действия СВОЙ ADO-объект.
90% вопросов "почему не работает", снимается(или вобще не возникает) при применении данного правила

и хорошо бы еще эти запросы не писать в коде программы.
Для этого есть ObjectInspector и параметры запроса(Parameters)
А в коде только задание параметров и выполнение запроса, написанного раз и навсегда (на все время работы программы).

P.S. на крайний случай НЕ ИСПОЛЬЗУЙ "частичное" формирование запроса
ADOQuery1.SQL.Add('insert into Users (Nam, Family)');
а старайся использовать устанавливать запрос СРАЗУ целиком.
ADOQuery1.SQL.Text := 'SELECT Family FROM Users WHERE Nam=rm';
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 22.09.2015 в 14:52.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
cUrl - обновление запроса XeNon_9_9 Общие вопросы C/C++ 0 21.10.2014 23:05
передать параметр запроса на обновление из Excel в Access Sergey112233 Microsoft Office Excel 12 01.02.2012 17:18
Обновление результатов запроса varyat Microsoft Office Access 24 02.09.2011 19:06
Обновление запроса Sergius X SQL, базы данных 2 01.06.2009 21:45
Обновление набора данных после добавления в таблицу записей "внешней" программой dimmm БД в Delphi 5 21.04.2009 00:56