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

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

Как мне узнать программно, найдена запись или нет?
...
Рейтинг: 0 / 0
23.12.2003, 12:34
    #32360644
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
То, чты записал, мало. Нужно еще выполнить запрос, вызвав метод твоего DataSet -> Open
Если что-то есть, то свойство RecordCount будет <> 0
...
Рейтинг: 0 / 0
23.12.2003, 12:37
    #32360647
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
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
23.12.2003, 12:53
    #32360698
Лкшы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
if(! DataModule1->IBDataSet1->SelectSQL->IsEmpty() )
так наверно будет правильнее.
...
Рейтинг: 0 / 0
23.12.2003, 12:57
    #32360712
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
2 1man
Дык я ж и говорю, сравнивать только с нулем
...
Рейтинг: 0 / 0
23.12.2003, 13:10
    #32360745
Milk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
Спасибо.

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

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
23.12.2003, 13:16
    #32360756
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
Да вроде бы... На всяки посмотри внимательно, что-то с первой кавычкой сомнительное...
...
Рейтинг: 0 / 0
23.12.2003, 13:16
    #32360757
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
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
23.12.2003, 13:23
    #32360769
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как програмно узнать...... (С++В & IB)
FetchAll
Ага, на здоровье. У него их там миллионов 5-6 (записей).

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


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


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

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

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

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


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


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