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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 18.04.2009, 09:57   #1
lenuxoid
Пользователь
 
Регистрация: 18.12.2008
Сообщений: 12
По умолчанию AdoQuery

Добрый день!
Делаю запрос через ADOQuery. В инспекторе объектов следующее.
Connection - ADO Connection1
SQl - SELECT * FROM Справочник
Вывожу в отдельную форму результат запроса (Dbgid+DataSource), запрос выполняется.
В главной форме пишу код:
Datamodule1.FindQuery.Active:=false ;
Datamodule1.FindQuery.SQL.Clear;
Datamodule1.Findquery.SQL.ADD ('SELECT *');
Datamodule1.FindQuery.SQL.ADD ('FROM Справочник');
Datamodule1.FindQuery.SQL.Add ('Where Телефон LIKE ' ' '+Edit1.txt+' ' ' ');
Datamodule1.FindQuery.SQL.Active:=t rue;
Form4.showmodal;
Программа запускается, но ничего не выводит. В свойствах FindQuery, мой старый запрос (SELECT * FROM Справочник ).
Не пойму в чем дело.



---------------------------------
В новом проекте практически тоже самое.
Одно, хорошо поиск осуществляется. Но теперь после завершения работы программы.
в свойствах adoquery - active - false;
sql - Select * from Справочник.
Думаю, что если программно меняется SQL запрос, то в свойствах он тоже должен меняться.
Не пойму.
lenuxoid вне форума
Старый 18.04.2009, 10:10   #2
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

1) Как у тебя связаны Query,Source и Grid?
2) Поле Телефон строковое? если да, то в запросе нужно указывать не
Цитата:
LIKE ' ' '+Edit1.txt+' ' '
, а
Цитата:
LIKE "'+Edit1.text+'"
(с кавычками)
3)
Цитата:
В свойствах FindQuery, мой старый запрос (SELECT * FROM Справочник ).
с чего ты это решил?

Последний раз редактировалось S@fer; 18.04.2009 в 10:13.
S@fer вне форума
Старый 18.04.2009, 22:30   #3
koma_grusha
Редкий обитатель
Форумчанин
 
Аватар для koma_grusha
 
Регистрация: 08.04.2009
Сообщений: 170
По умолчанию

то что при проектировании в свойствах компонента твой старый запрос это нормально, ведь другой ты формируешь в процессе выполнения, только попробуй делать это в FormShow для Form4, а текст запроса посылай туда через переменную

хотя это если ты создаешь форму в процессе выполнения...

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

Последний раз редактировалось koma_grusha; 18.04.2009 в 22:34. Причина: да что-то на ходу вспоминаю...
koma_grusha вне форума
Старый 24.03.2010, 20:42   #4
Art_Divin
Пользователь
 
Аватар для Art_Divin
 
Регистрация: 06.03.2010
Сообщений: 14
По умолчанию

Доброго времени суток.
Есть проблемка:
Создаю запрос, всё как нужно, запускаю функцию:
Код:
function savebutclick(
  name,address,current_pwd,mail,new_pwd,repeat_pwd: TbsSkinEdit;
  SQL_change_acc: TADOQuery;
  SQL2: TADODataSet;
  SQL2pwd: TWideMemoField):boolean; export;
begin
Result:=false;
{запрос в БД на изменение}
if check(name,address,current_pwd) then begin {если поля заполнены (не пустые), то выполнить запрос}
  SQL_change_acc.Prepared:=false;
  SQL_change_acc.SQL.Clear; {TADOQuery}
  SQL_change_acc.SQL.Add('UPDATE users');
  if current_pwd.Visible then begin
 {заметка №1}   if compare2(current_pwd,SQL2pwd) then begin {если существующий пароль введен правильно, то}
      if compare(new_pwd,repeat_pwd,current_pwd) then {сравниваем новый пароль, если он введен}
        SQL_change_acc.SQL.Add('SET name = '+QuotedStr(name.text)+',mail = '+
          QuotedStr(mail.text)+',address = '+QuotedStr(address.text)+',pwd = '+QuotedStr(new_pwd.text))
      else {если нет, то выполним следующий код:}
   {заметка №2}    SQL_change_acc.SQL.Add('SET name = '+QuotedStr(name.text)+',mail = '+
          QuotedStr(mail.text)+',address = '+QuotedStr(address.text));
      SQL_change_acc.SQL.Add('WHERE uid = 2');
      SQL_change_acc.Prepared := true;
      SQL_change_acc.ExecSQL;
      SQL2.Requery; {TADODataSet}
      ShowMessage('Введённые Вами данные были сохранены');
      Result:=true;
    end
  end else
    if compare(new_pwd,repeat_pwd,current_pwd) then begin {если существующего пароля нет, то проверяем новый пароль на правильность, а затем делаем запрос}
      SQL_change_acc.SQL.Add('SET name = '+QuotedStr(name.text)+',mail = '+
        QuotedStr(mail.text)+',address = '+QuotedStr(address.text)+',pwd = '+QuotedStr(new_pwd.text));
      SQL_change_acc.SQL.Add('WHERE uid = 2');
      SQL_change_acc.Prepared := true;
      SQL_change_acc.ExecSQL;
      SQL2.Requery;
      ShowMessage('Введённые Вами данные были сохранены');
      Result:=true;
    end;
end;
end;
и всё работает нормально первые 2, 3, 4 раза.
Но в один прекрасный момент (несмотря на промежуток между запусками функции) прога рушится и ссылается на заметку #1 или заметку #2.
Думаю, причина в том, что предыдущий запрос либо виснет, либо выполняется настолько долго, что при следующей попытке он всё еще активен.
Есть думы насчет события завершения (успешного выполнения) запроса, но как оно зовётся - понятия не имею.
Прошу помочь, поиск по форуму юзал, ничего схожего не нашел.

Пояснения:
  • SQL2 - AdoDataSet с запросом на выборку, содержит все необходимые поля
  • SQL_change_acc - ADOQuery с запросом на изменение (UPDATE), вносит изменения в бд
  • compare - функция для проверки существующего пароля
  • compare2 - функция для проверки нового пароля
  • check - фукнция для проверки на пустоту полей ввода

Заранее благодарю за любую оказанную помощь
House, progressive house, minimal house listener!
Linux registered user #505538
Art_Divin вне форума
Старый 25.03.2010, 17:41   #5
Art_Divin
Пользователь
 
Аватар для Art_Divin
 
Регистрация: 06.03.2010
Сообщений: 14
По умолчанию

ап, помогите решить проблему, а то проект стоит...
House, progressive house, minimal house listener!
Linux registered user #505538
Art_Divin вне форума
Старый 25.03.2010, 18:02   #6
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Попробуйте в начале процедуры закрывать запрос
Код:
SQL_change_acc.Close;
метод
Код:
SQL_change_acc.Prepared
советую убрать
©Учиться, учиться и еще раз учиться!
quit вне форума
Старый 25.03.2010, 18:24   #7
Art_Divin
Пользователь
 
Аватар для Art_Divin
 
Регистрация: 06.03.2010
Сообщений: 14
По умолчанию

Дело в том, что запрос, где есть Prepared, не возвращает значений, он их изменяет. Т.е. методы open & close никак нельзя использовать в данном случае...
Не помогло...

У нас принято давать темам названия, отражающие суть вопроса.
Читаем правила форума и раздела.
Модератор
House, progressive house, minimal house listener!
Linux registered user #505538

Последний раз редактировалось mihali4; 26.03.2010 в 23:42.
Art_Divin вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AdoQuery Stanislav БД в Delphi 34 26.06.2009 22:09
ADOQuery Только_Учусь Помощь студентам 2 16.07.2008 00:31
ADOQuery Roof БД в Delphi 2 12.07.2008 18:08
ADOQuery + поток Гена БД в Delphi 0 27.03.2007 09:55
adoquery Toxa БД в Delphi 10 12.02.2007 20:07