powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как програмно узнать...... (С++В & IB)
13 сообщений из 13, страница 1 из 1
Как програмно узнать...... (С++В & IB)
    #32360630
Milk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно осуществить некие действия если запись есть.

Пишу запрос:
DataModule1->IBDataSet1->SelectSQL->Add("select * from DOCUMENTS where EDOCNAME='"+ExtractFileName(FileName)+"'");

Как мне узнать программно, найдена запись или нет?
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360644
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, чты записал, мало. Нужно еще выполнить запрос, вызвав метод твоего DataSet -> Open
Если что-то есть, то свойство RecordCount будет <> 0
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360647
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
property RecordCount: Integer;

Description

Examine RecordCount to determine the number of records that the dataset has currently retrieved from the server. As the dataset fetches records from the server, the value of RecordCount increases.

After a call to the FetchAll method, RecordCount is the total number of records in the dataset.
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360698
Лкшы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if(! DataModule1->IBDataSet1->SelectSQL->IsEmpty() )
так наверно будет правильнее.
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360712
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 1man
Дык я ж и говорю, сравнивать только с нулем
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360745
Milk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.

Зделал так, думаю нормально?

DataModule1->IBDataSet1->Active = false;
DataModule1->IBDataSet1->SelectSQL->Clear();
DataModule1->IBDataSet1->SelectSQL->Add("select * from DOCUMENTS where EDOCNAME='"+ExtractFileName(FileName)+"'");
DataModule1->IBDataSet1->Active = true;
if(DataModule1->IBDataSet1->RecordCount ==0 )
{ ShowMessage("Проверка закончена. \n Файл не зарегистрирован в данной программе."); }
else
{ ShowMessage("Проверка закончена. \n Уч.карта зарегистрирована."); }
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360756
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вроде бы... На всяки посмотри внимательно, что-то с первой кавычкой сомнительное...
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360757
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Milk
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
DataModule1->IBDataSet1->Active = false; 
DataModule1->IBDataSet1->SelectSQL->Clear(); 
DataModule1->IBDataSet1->SelectSQL->Add( "select * from DOCUMENTS where EDOCNAME='"+ExtractFileName(FileName)+"'" ); 
DataModule1->IBDataSet1->Active = true; 
DataModule1->IBDataSet1->FetchAll; // !!! Без этого может не работать
if(DataModule1->IBDataSet1->RecordCount == 0  ) 
{ ShowMessage( "Проверка закончена. \n Файл не зарегистрирован в данной программе." ); } 
else 
{ ShowMessage( "Проверка закончена. \n Уч.карта зарегистрирована." ); }

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360769
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FetchAll
Ага, на здоровье. У него их там миллионов 5-6 (записей).

После Open ВСЕГДА фетчится первая запись. Так что не напрягайся с FetchAll. Как бы хуже не вышло. Если есть сомнения, то делай
select count(*) from ...
Тогда всегда гарантия, что DataSet->field[0]->AsInteger всегда даст достоверный результат
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360845
Milk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтот меня немного запутали. Кодами.


авторDnico
А что это за добавление?
Нужно это?
DataModule1->IBDataSet1->FetchAll; // !!! Без этого может не работать


Тот код что я привел, работает.

автор mv
Так нужно добавлять или нет?
буду же я каждый раз перепроверять, хотелось бы сразу нормально сделать.
Тот код что я привел вышее.. вроде показывает правильно. Или бывают проблемы когда много записей?

Я в догатках добавлять или нет "FetchAll" скажите??
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360879
Лкшы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает, но я пару раз столкнулcя с Exception после проверки
RecordCount!=0 причем у клиента, и понять причину не смог.
Поставил IsEmpty() - больше проблемм на эту тему не имел.
Причину не знаю.
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360894
Лкшы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FethAll - это запрос к серверу, чтобы от отдал все записи из выборки.
То-же самое в IB можно получить через Last(), в результате RecordCount, получит настоящее значение (сколько записей по выборке), а так - он дает только количество записей полученных после последней команды серверу Feth.
Только, если записей оч. много, или запрос тяжелый, ждать придется долго.
...
Рейтинг: 0 / 0
Как програмно узнать...... (С++В & IB)
    #32360913
Milk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СПАСИБО!

Благодарю за отзывчивость.


P.S.
Поставлю эту команду, сейчас записей не так много, да и не так часто БД пополняется.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как програмно узнать...... (С++В & IB)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]