Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/40: Рейтинг темы: голосов - 40, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 14.06.2009
Сообщений: 12

Запросы в ADOQuery и DBGrid

14.06.2009, 02:42. Показов 7907. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, подскажите как сделать правильно, ибо уже перерылись все книги бестолку(
У меня есть edit в который вводит пользователь номер читателя(ключевое поле таблицы) и по этому номеру открывается таблица в которой отображаются данные именно про этого читателя. Но если вводится несуществующий номер, то открывается пустая таблица, как сделать что бы вместо открытия пустой таблицы появлялось сообщение типа "несуществует ...."
И еще вопрос, как проверить есть ли в конкретной ячейке DBGrid запись или ячейка пуста?

Добавлено через 5 часов 8 минут 57 секунд
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TMain.Button1Click(Sender: TObject);
begin
if edit1.Text='' then
begin
ShowMessage('Введите данные');
abort();
end
else
begin
modul.Reader.SQL.Clear;
modul.Reader.SQL.Add('select * from reader where RId='+Edit1.Text);
modul.Reader.Open;
end;
if modul.reader.RecordCount<>0 then
modul.DataSourceR.DataSet:=modul.Reader
else
begin
ShowMessage('В БД нет записей, удовлетворяющих критерию запроса.');
abort();
end;
end;
Что бы узнать пустое поле в таблице или нет, используется:
Code
1
2
Where <имя поля> is null
//где поле пустое
только мне нужно удалить запись если поле MChack с записью, и не удалять если это поле пустое
вот это так:
Delphi
1
2
3
4
5
6
modul.Movebook.SQL.Clear;
modul.Movebook.SQL.Add('delete from movebook where MBook='+ edit5.Text+'and MChack is not null');
modul.Movebook.ExecSQL;
modul.Movebook.SQL.Clear;
modul.Movebook.SQL.Add('select * from movebook where MReader=RId');
modul.Movebook.Open;
работает, но когда поле пустое, кнопка не срабатывает, я не знаю как послать сообщение что поле пустое, т.е. книга не здана... Что делать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.06.2009, 02:42
Ответы с готовыми решениями:

Обращение в ADOquery к ADOquery
Доброго времени суток. Вопрос заключается в следующем: Имеется подключенная бд *.mdb к delphi...

Динамический Adoquery - объединение нескольких Adoquery в один (если такое возможно)
Здравствуйте! Вот думаю три месяца и решил написать на форум, хотя может и не будет ответа, так...

Запросы: для выбранного в DBGrid сотрудника отобразить информацию в другом DBGrid
Добрый вечер! Вот какой вопрос необходимо для выбранного сотрудника в DBGrid отобразить информацию...

5
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
14.06.2009, 10:13
чтобы проверить, есть запись или нет, достоточно после выполнения запроса RecordCount ADOQuery проверить... а вот про пустые ячейки как-то не понял, в дбгрид обычно отображается все данные, что есть в источнике данных, прикрепленном к данному гриду
0
36 / 35 / 3
Регистрация: 12.06.2009
Сообщений: 211
14.06.2009, 10:27
Есть предложение сделать проверку после "внесения данных"
Проверка такого плана:
if StringGrid1.Cells[1,1]='' then StringGrid1.Cells[1,1]:='Данных нет' else StringGrid1.Cells[1,1]:='(переменная с твоими данными)';

Основное условие - не забывать очищать таблицы перед запуском скрипта с запросами(т.е. первым же действием,после нажания на button )


З.Ы. под словом "внесения данных",я имею ввиду - вывод на экран...с проверкой внутри полученных данных я согласен с VoodooMan ..Если РекордКаунт = 0,то соответсвенно ничего н найдено..
0
0 / 0 / 0
Регистрация: 14.06.2009
Сообщений: 12
14.06.2009, 22:12  [ТС]
Вы не так поняли, или я не доганяю...
VampireKB- у меня не StringGrid, а DBGrid-я обратиться таким образом к ячейке не могу. Программа работает как я хочу. дбгрид обычно отображается все данные, что есть в источнике данных - это так, просто у меня не во все поля внесены данные, и вот в по полю в котором могут быть или отсуцтвовать данные я и ориентируюсь, если в этом поле есть данные - то запись вся в целом удаляеться при нажатии на буттон, если же это поле пустое - то запись остается. В данном случае все работает, просто если это поле пустое, то пользователь жмет на удалить, запись остается(как и надо) но при этом не возникает сообщение что мол запись пуста, книгу не вернули, а значит пока ее не вернули, нельзя удалять.. со стороны выглядит так будто кнопка не работает в данной ситуации
0
36 / 35 / 3
Регистрация: 12.06.2009
Сообщений: 211
14.06.2009, 22:35
Кверчи,
Ну ты в кнопку вставь:
Delphi
1
2
3
Movebook.SQL.Clear;
modul.Movebook.SQL.Add('select MChack from movebook where MBook='+ edit5.Text+');
if (MChack).asstring= '' then showmessage('Он еще не сдал книгу') else...;

Пример:
Delphi
1
2
3
4
5
6
7
8
9
IBQuery1.Close;
 
IBQuery1.Params.Clear;
IBQuery1.SQL.Text:='select MChack from movebook where MBook='+ edit5.Text+'';
IBQuery1.Open;
While not IBQuery1.Eof do begin
if IBQuery1.FieldbyName('MChack').AsString) <>'' then do your work else showmesage('книгу не сдали');
IBQuery1.Next;
end;
1
0 / 0 / 0
Регистрация: 14.06.2009
Сообщений: 12
14.06.2009, 23:30  [ТС]
Пасибки, у меня немного по - другому получилось
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TBookOfReader.Button7Click(Sender: TObject);
begin
  modul.Movebook.SQL.Clear;
  modul.Movebook.SQL.add('select MChack from movebook where MBook='+edit5.Text+'and MReader=RId');
  modul.Movebook.Open;
  if modul.Movebook.FieldByName('MChack').AsString='' 
  then
  begin
    showmessage('the reader don"t chack this book');
    abort();
  end
  else
  begin
    modul.Movebook.SQL.Clear;
    modul.Movebook.SQL.Add('delete from movebook where MBook='+ edit5.Text+'and MChack is not null');
    modul.Movebook.ExecSQL;
    modul.Movebook.SQL.Clear;
    modul.Movebook.SQL.Add('select * from movebook where MReader=RId');
    modul.Movebook.Open;
  end;
end;
А у меня еще вопрос: этот код находит только первое поле MChack, и по нем выводит результат. А как можно прочесать всю таблицу с заданным параметром? while not ADOQuery.eof do
не выходит, потому что тогда находится первый результат, по нем выполняется действие, а дальше программа зависает, потому что начинает дальше читать все подходящие данные из таблицы. Подскажите, пожалуйста
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
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select * from movebook where Mreader='+edit2.Text);
  adoquery1.Open;
  adoquery1.First;
  i:=0;
  while not adoquery1.Eof do      
    begin
     ADOQuery1.SQL;
     if (adoquery1.FieldByName('MChack').AsString='') 
      then
      begin
       SHowMessage ('Is empty');
       adoquery1.Last;
       i:=i+1;
     end
     else
       adoquery1.Next;      
   end;
   if (adoquery1.FieldByName('MChack').AsString<>'') and (i=0) then
     showmessage('Is here');
   if adoquery1.RecordCount=0 then
     Showmessage('Is absence') 
end;
быдлокодерство в связи с маленьким количеством опита написания бд в делфи, но пашет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.06.2009, 23:30
Помогаю со студенческими работами здесь

Создание выпадающего списка в DBGrid+ADOQuery
Здравствуйте. Есть база Access. В ней находится таблица, в которой одно поле является выпадающим...

Delphi7+ADOQuery+Access+DbGrid
Добрый день господа! Помогите решить проблемку. Есть таблица ADOBankBank: Key_b NDnja Rasxod...

DBGrid с LookUp полями в ADOQuery глючит только у меня?
Ау! БОЛЬШИЕ спецы! Кто работает с ADO - компонентами! Как сделать, чтоб при редактировании в...

Связь между dbGrid'ами с помощью ADOQuery
Всем привет! Имеются две таблицы: tovar и proizvoditel. Связь осуществляется по полям...

Dbgrid adoquery sql
Доброго времени суток. Не понимаю как сделать (ведомость к оплате по заданому цеху с подсчетом...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru