Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.17;
Скачать: CL | DM;

Вниз

Как обработать SQL запрос?   Найти похожие ветки 

 
Kinder   (2003-10-22 15:47) [0]

Вот я написал

with moduledata.Query do begin
SQL.Text :=
"SELECT fio FROM people WHERE id="+table.SelectedField.Text;
ExecSQL;

Close;
end;

Как теперь взять массив со значениями fio?


 
Reindeer Moss Eater ©   (2003-10-22 15:50) [1]

with moduledata.Query do begin
SQL.Text :=
"SELECT fio FROM people WHERE id="+table.SelectedField.Text;
open;
while not Eof do
begin
...
Next;
end;
Close;
end;


 
bushmen ©   (2003-10-22 15:51) [2]

with moduledata.Query do begin
Close;
Clear;
SQL.ADD :=
("SELECT fio FROM people WHERE id="+table.SelectedField.Text);
Open;
end;

А потом, смотря куда тебе результат нужен.


 
Kinder   (2003-10-22 17:53) [3]

Ну скажем в TstringList загнать значения fio из базы. Как?


 
Sandman25 ©   (2003-10-22 18:09) [4]

with Query do
while Eof do
StringList.Add(FieldByName("fio").AsString;


 
Kinder   (2003-10-22 18:54) [5]

Странно. Но пишет
Query: Field "fio" not found.


 
Sandman25 ©   (2003-10-22 18:55) [6]

Тогда попробуйте Fields[0].AsString


 
Vlad ©   (2003-10-22 19:02) [7]

>Sandman25 © (22.10.03 18:09) [4]
поправочка - while not Eof


 
Kinder   (2003-10-22 19:12) [8]

Теперь работает, но цикл не останавливается.

procedure TForm1.tableCellClick(Column: TColumn);
begin

with moduledata.Query do begin
Close;
SQL.Text :="SELECT * FROM people WHERE id="+table.SelectedField.Text;
Open;
while not eof do
ShowMessage(Fields[1].AsString);
Close;
end;

end;


Всё время метка выводится с одним и тем же значением. Тут цикл должен пройти один раз и закончится вроде. А он повторяется бесконечно.


 
Vlad ©   (2003-10-22 19:16) [9]

while not eof do
begin
ShowMessage(Fields[1].AsString);
Next;
end;


 
Kinder   (2003-10-22 19:20) [10]

Сделал
with moduledata.Query do begin
Close;
SQL.Clear;
SQL.Text :="SELECT * FROM people WHERE id="+table.SelectedField.Text;
Open;
while not eof do
begin
ShowMessage(Fields[1].AsString);
next;
end;
Close;
end;


Теперь пишет ошибку
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.


 
Vlad ©   (2003-10-22 19:27) [11]

Нет данных соответствующих SQL запросу.
Другими словами Query пуст.


 
Kinder   (2003-10-22 19:32) [12]

И чего делать? Вроде же всё корректно.


 
Fay   (2003-10-22 19:33) [13]

апдатесы ставил для D5?


 
Kinder   (2003-10-22 19:39) [14]

Ставил. А причем тут это?


 
Vlad ©   (2003-10-22 19:41) [15]

перед open напиши showmessage(sql.text) и убедись что запрос сформировался именно так как ты хочешь.


 
MsGuns ©   (2003-10-22 20:15) [16]

Оформляй код как для себя, а не для врага (в т.ч. отступы):

procedure ....
begin
Form1.MyListBox.Clear;
with moduledata.Query do
begin
if Active then Close;
SQL.Clear;
SQL.Add("SELECT FIO, NAME");
SQL.Add(" FROM people");
SQL.Add(" WHERE id="+table.SelectedField.Text);
try
Prepare
Open;
except
exit;
end;
if RecordCount=0 then exit;
while not eof do
begin
Form1.MyListBox.Add(FieldByName("FIO").AsString)
// ShowMessage(Fields[1].AsString);
next;
end;
Close;
end;
end;


 
MsGuns ©   (2003-10-22 20:17) [17]

Пардон, там в нескольких строчках нет концевиков ";"
Надеюсь, понятно в каких ;)


 
Kinder   (2003-10-22 23:13) [18]

Спасибо :)

Но всё равно ошибка идёт.

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.


 
Anatoly Podgoretsky ©   (2003-10-23 05:13) [19]

Что поделаешь, ну нет записей


 
NAlexey ©   (2003-10-23 08:15) [20]

Попробуй перед циклом вставить First:

First;
while not Eof do
begin
ShowMessage(Fields[1].AsString);
Next;
end;


 
Johnmen ©   (2003-10-23 09:10) [21]

Обучение детей. On-line.
Грустно...


 
Kinder   (2003-10-23 18:39) [22]

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

First был вставлен. Всё равно ошибка.


 
Sandman25 ©   (2003-10-23 18:46) [23]

В Before/AfterScroll что-то есть?


 
Vlad ©   (2003-10-23 18:50) [24]

>Sandman25 © (23.10.03 18:46) [23]
А какая разница, если BOF=EOF значит набор данных пуст.
>Kinder (23.10.03 18:39) [22]
Попробуй, что вернет Query.IsEmpty, true или false ? (после Open)


 
Sandman25 ©   (2003-10-23 18:54) [25]

[24] Vlad © (23.10.03 18:50)

Может, там у него в BeforeScroll вызывается Edit. Тогда именно такая ошибка и будет вылазить.


 
Kinder   (2003-10-23 18:59) [26]

2 Sandman25

А что такое Before/AfterScroll ?


 
Vlad ©   (2003-10-23 19:00) [27]

>Sandman25 © (23.10.03 18:54) [25]
Вот так вот :)))


 
Kinder   (2003-10-23 19:02) [28]

Query.IsEmpty -- false.

Т.е. один раз цикл срабатывает нормально, т.к. в запросе всего одно значение возвращается. А потом реально пусто, но почему цикл идет?


 
Vlad ©   (2003-10-23 19:02) [29]

Kinder (23.10.03 18:59) [26]
Христа ради, развей мои сомнения.
Напиши строчку после OPen,
if Query.IsEmpty then Showmessage("папа у васи силен в математике");
И скажи нам было это сообщение или нет.


 
Vlad ©   (2003-10-23 19:03) [30]

Kinder (23.10.03 19:02) [28]
Приведи еще раз код


 
TohaNik ©   (2003-10-23 19:10) [31]

procedure TForm1.tableCellClick(Column: TColumn);
:))


 
Kinder   (2003-10-23 19:17) [32]

Vlad

Да нету :)

procedure TForm1.tableCellClick(Column: TColumn);

begin
with moduledata.Query do begin
Close;
SQL.Clear;
SQL.Text :="SELECT * FROM people WHERE id="+table.SelectedField.Text;
Open;
{ if IsEmpty then Showmessage("папа у васи силен в математике");}
First;
while not eof do
begin
ShowMessage(Fields[1].AsString);
next;
end;
Close;
end;

end;


 
Kinder   (2003-10-23 19:27) [33]

2TohaNik

Что смешного?


 
sniknik ©   (2003-10-23 21:44) [34]

Fay (22.10.03 19:33) [13]
> апдатесы ставил для D5?

Kinder (22.10.03 19:39) [14]
> Ставил. А причем тут это?

без них именно эта ошибка на нормальных но пустых датасетах. и именно в D5.

Kinder (23.10.03 19:27) [33]
> 2TohaNik

> Что смешного?

перенеси код в
procedure TForm1.Button1Click(Sender: TObject);
лутше не стало?


 
Sewer   (2003-10-24 14:16) [35]

А какое значение попадает в table.SelectedField.Text?


 
Zacho ©   (2003-10-24 14:21) [36]


> Sewer (24.10.03 14:16) [35]

А что такое "table.SelectedField" ?


 
Плохиш_   (2003-10-24 14:29) [37]

>TohaNik © (23.10.03 19:10) [31]

:-)))))))

>Kinder не пора ли книжки начать читать, да и мозги пора бы включить.


 
Vlad ©   (2003-10-24 14:31) [38]

Zacho © (24.10.03 14:21) [36]
Это у него грид так называется


 
Mike Kouzmine ©   (2003-10-24 14:35) [39]

First;
while not eof do
begin
ShowMessage(Fields[0].AsString);
next;
end;
Close;
end;

end;
Мне кажется надо 0, поле то одно.


 
Плохиш_   (2003-10-24 14:40) [40]


> Vlad © (24.10.03 14:31) [38]
> Zacho © (24.10.03 14:21) [36]
> Это у него грид так называется


Ну дык :-)

Интересно, сколько надо времени, чтобы понять, что бывает с данными в гриде после закрытия набора данных.
Подождём ;-)


 
Vlad ©   (2003-10-24 14:47) [41]

что бывает с данными в гриде после закрытия набора данных.
Это к чему ?


 
panov ©   (2003-10-24 14:54) [42]

>Vlad © (24.10.03 14:47) [41]
Это к чему ?

Вот к этому -

begin
with moduledata.Query do begin
Close;
SQL.Clear;


 
Vlad ©   (2003-10-24 15:02) [43]

>panov © (24.10.03 14:54) [42]
С чего вы взяли, что moduledata.Query подключен к гриду table ?
Если это так, то чушь какая-то получается.


 
Kinder   (2003-10-24 17:30) [44]

см. дадалее

procedure TForm1.FIO1Click(Sender: TObject);
begin
with moduledata.Query do
begin
if Active then Close;
SQL.Clear;
SQL.Add("SELECT *");
SQL.Add(" FROM people");
SQL.Add(" WHERE id="+table.SelectedField.Text);
try
Open;
except
exit;
end;
if RecordCount=0 then exit;
First;
while not eof do
begin
ShowMessage(FieldByName("FIO").AsString);
next;
end;
Close;
end;
end;


 
Kinder   (2003-10-24 17:31) [45]

Сегодня 7 делфу заинсталю. Посмотрю.


 
Sandman25 ©   (2003-10-24 17:31) [46]

В таблице есть поле FIO?


 
Kinder   (2003-10-24 23:33) [47]

есть конечно :)


 
Kinder   (2003-10-26 13:17) [48]

ну что там. что-нить решили? у меня пока ничего.


 
Kinder   (2003-10-27 17:23) [49]

где идеи?


 
Sandman25 ©   (2003-10-27 17:26) [50]

Пройти пошагово, найти строку, на которой возникает ошибка. Если это
FieldByName... то заменить на Fields[номер].
Проверить Fields[номер].IsNull.


 
Kinder   (2003-10-27 19:16) [51]

Ошибка идет после Next сразу.


 
Sandman25 ©   (2003-10-28 10:14) [52]

Получается бродовая ситуация - Eof говорит, что конца набора данных еще нет, а Next говорит, что он уже есть.
Поставьте патч для Вашей версии Delphi, смените компоненты доступа, смените версию Delphi.


 
Дуся ©   (2003-10-28 11:50) [53]

Блин, народ.. Забыли все..
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record

тут Апдейты ныжны не только дельфовые, но и АДОшные.. http://info.borland.com/devsupport/delphi/fixes/delphi501/database.html#ado


 
Tumcoat ©   (2003-10-29 01:56) [54]


> Дуся © (28.10.03 11:50) [53]
> Блин, народ.. Забыли все..
> тут Апдейты ныжны не только дельфовые, но и АДОшные.. http://info.borland.com/devsupport/delphi/fixes/delphi501/database.html#ado


О как всегда все решается легко и просто.
Кстати вот еще одна ссылка:
http://delphi.mtu-net.ru/zip/ado_patch.zip



Страницы: 1 2 вся ветка

Текущий архив: 2003.11.17;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.033 c
3-56511
Stratos
2003-10-28 01:07
2003.11.17
Выбор записей с приоритетом


1-56573
Cosinus
2003-11-06 11:51
2003.11.17
Совместимость версий Delphi


6-56797
DrFox
2003-09-19 19:25
2003.11.17
Как использовать Socket


4-56962
Maxim Pshevlotsky
2003-09-02 08:57
2003.11.17
Как заменить значок из ресурсов DLL?


1-56601
solo
2003-11-04 23:23
2003.11.17
Хитрый AccessViolation