![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Просто Query без table и DBGrid [D5, D6, D7, DB2]
Lefan © (2002-12-17 14:54:00)Приветсвую всех...
Народ, такая проблема, требуется просто найти запись, имеется ли такая иль нет.
на клиента тащить безполезно (более 70 млн. записей)...
если есть обновить, если нет, добавить....
везде гляжу примерчики, и везде с table или DBGrid.
А так просто можна?
Вот наковырял:
data.Query.SQL.Clear;
data.Query.SQL.Text:="Select * from SAV.DAY8 where datestr=""5/12""";
data.Query.ExecSQL;
проверить не получается, есть такая запись иль нет... :(
Заранее благодарен за ответ.
С уважением Алексей.
lefan (2002-12-20 06:15:00) [1]---===3===---
data.Query.SQL.Clear;
опечаточка...
data.Query.SQL.Text:="select count(*) from SAV.DAY8 where datestr=""15/12""";
data.Query.Open;
try
// if data.Query.Fields[0].IsNull then showmessage("Not OK")
if data.Query.Fields[0].AsInteger>0 then showmessage("OK")
// if data.Query.IsEmpty then showmessage("Not OK")
else showmessage("NOT OK")
finally
data.Query.Close;
end;
lefan (2002-12-20 06:13:00) [2]Кстати во всех примерчиках лучше использовать count(*), т.к. действительно не важно что за данные (как было уже сказано выше)
---===3===---
data.Query.SQL.Clear;
data.Query.SQL.Text:="select count(*) from SAV.DAY8 where datestr=""15/12""";
data.Query.Open;
try
// if data.Query.Fields[0].IsNull then showmessage("Not OK")
// if data.Query.Fields[0].AsInteger>0 then showmessage("OK")
// if data.Query.IsEmpty then showmessage("Not OK")
else showmessage("NOT OK")
finally
data.Query.Close;
end; еще рабочий... :)
Тож спаибо... :)
lefan (2002-12-20 06:03:00) [3]Приветсвую народ, спасибо всем, кто помого, вод ряд примеров, которые у мня пошли... :)
---=== 1 ===---
data.Query.SQL.Clear;
data.Query.SQL.Text:="select * from SAV.DAY8 where datestr=""35/12""";
data.Query.Open;
try
if data.Query.Fields[0].IsNull then showmessage("Not OK")
else showmessage("OK")
finally
data.Query.Close;
Data.Database.Close;
end;
---=== 2 ===---
data.Query.SQL.Clear;
data.Query.SQL.Text:="select * from SAV.DAY8 where datestr=""15/12""";
data.Query.Open;
try
if data.Query.IsEmpty then showmessage("Not OK")
else showmessage("OK")
finally
data.Query.Close;
data.day8.Close;
Data.Database.Close;
end;
Эти примера, оба работают как надо... ну думаю isEmpty будет наиболее правильно...
Всем огромнейшее спасибо... :)
С уважением Алексей.
Max Zyuzin (2002-12-17 18:37:00) [4]>Johnmen © (17.12.02 18:31)
Все ты попал :) теперь тебя достанут ;o) говоря при любом удбном и не очень случае, что при открытие датасета BOF = True ;)))
шутка :)))
Johnmen (2002-12-17 18:31:00) [5]>Sergey Masloff (17.12.02 18:18)
Да ! Да ! Я же высказался. Лишь небольшое добавление : считаю хорошей привычкой полагаться в своих приложениях на свойкод, работающий независимо от некоторых внешних факторов, в данном случае от того, открыли мы НД только что, или 100 процедур назад :)))
Sergey Masloff (2002-12-17 18:18:00) [6]Johnmen ©
файл db.pas:
procedure TDataSet.DoInternalOpen;
begin
FDefaultFields := FieldCount = 0;
InternalOpen;
FInternalOpenComplete := True;
UpdateBufferCount;
FBOF := True;
~~~~~~~~~~~~~
end;
Johnmen (2002-12-17 17:58:00) [7]Привет ! :)
Дествительно ! Хотя вот у меня сложилось (и очень давно) некоторое недоверие ко всему, что пишут в хелпах.
Ну да ладно ! В данном случае это так.
:o)))))
FreeLancer (2002-12-17 17:45:00) [8]
Test Bof (beginning of file) to determine if the dataset is positioned at the first record. If Bof is true, the active record is unequivocally the first row in the dataset. Bof is true when an application.
Opens a dataset.
Calls a dataset’s First method.
Call a dataset’s Prior method, and the method fails because the first row is already active.
Calls SetRange on an empty range or dataset.
Bof is false in all other cases.
Привет, это опять я :-)
Johnmen (2002-12-17 17:41:00) [9]>Sergey Masloff (17.12.02 17:26)
>После открытия НД BOF=true это документировано
Подскажи, пожалуйста, где ?
Никакого сарказма ! Мне это интересно.
Sergey Masloff (2002-12-17 17:26:00) [10]Johnmen ©
>Не находишь, что это разные вещи ? ;o)
неа... После открытия НД BOF=true это документировано ;-)
Ладно, это уже в раздел Потрепаться ;-)
Max Zyuzin (2002-12-17 17:20:00) [11]>Sergey Masloff (17.12.02 16:58)
Нету дельфей под руками, что бы проверить как реализован метод IsEmpty по этому ничего сказать не могу...
Anatoly Podgoretsky (2002-12-17 17:19:00) [12]Sergey Masloff (17.12.02 16:58)
"Eof and Bof"
И например можно получить неприятности на непропатченных версиях и т.д.
На мой взгляд если уж клиент/сервер то и надо использовать соответствующие методы, которые будут работать правильно на большинстве баз данных, я не думаю что можно найти диалект SQL в котором бы не работал COUNT
Johnmen (2002-12-17 17:14:00) [13]>Sergey Masloff (17.12.02 16:58)
>Johnmen ©
>If both Eof and Bof are True, the dataset is empty. (Delphi
>Help)
и
>Sergey Masloff (17.12.02 16:09)
>Хотя, конечно, я бы написал if BOF=EOF then
Не находишь, что это разные вещи ? ;o)
Sergey Masloff (2002-12-17 16:58:00) [14]Johnmen ©
If both Eof and Bof are True, the dataset is empty. (Delphi Help)
Max Zyuzin ©
IsEmpty реализован именно через сравнение EOF и BOF
Anatoly Podgoretsky ©
Как обычно самое взвешенное и осмысленное решение. Снимаю шляпу. Серьезно.
Sergey Masloff (2002-12-17 16:47:00) [15]Johnmen ©
Прощаю ;-)
Anatoly Podgoretsky (2002-12-17 16:26:00) [16]По моему Count единственно, что надежное, в этой мешанине баз м методов доступа
Johnmen (2002-12-17 16:19:00) [17]>Sergey Masloff (17.12.02 16:09)
>Хотя, конечно, я бы написал if BOF=EOF then
Ты что, серьезно ?!
Прости, но очень веселишь поспешными ответами...:)
Max Zyuzin (2002-12-17 16:16:00) [18]А может проще сделать так?
Q.Open;
if Q.IsEmpty then // Амба :о)
Sergey Masloff (2002-12-17 16:09:00) [19]Johnmen ©
>>if Fields[0].IsNull then
>> ShowMessage("Таких нету!");
>Ты что, серьезно ?!
Человек хотел выполнить запрос:
"Select * from SAV.DAY8 where datestr=""5/12""";
Когда * то IB делает
select * from rdb$relation_fields
where rdb$relation_name = "TABLE_NAME" для определения имен полей. И с вероятностью 99.99 первое поле это ПК. ПК (и любая его часть) не может быть NULL. Если NULL то нету и записи
Хотя, конечно, я бы написал if BOF=EOF then что надежно работает со времен турбопаскаля
Val (2002-12-17 16:05:00) [20]Согласен, но это лишь предложение, а не аксиома. Лучше все же запросить count, если не важны значения полей.