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

Вниз

Запрос   Найти похожие ветки 

 
Лариса   (2003-11-20 13:31) [0]

Добрый день!
У меня база Access, я через Query вытащила данные из базы. В цикле хожу по записям и обрабатываю их. Цикл дошел до последней записи и я попыталась закрыть этот запрос: proverka.close; вышла ошибка: "Bof или EOF имеет значение TRUE, либо текущая запись удалена. Для выполнения операции требуется текущая запись".
Что сделать, чтобы избежать такой ошибки?


 
Digitman ©   (2003-11-20 13:34) [1]

код приведи


 
Fay   (2003-11-20 13:37) [2]

ADO?


 
Лариса   (2003-11-20 13:45) [3]

Я привожу упрощенный вариант без всяких подсчетов
gruz.close;
gruz.parameters[0].value:="51";
gruz.parameters[1].value:=trim(edit1.text);
gruz.open;
gruz.first;
while not (q2.eof) do begin
вывожу данные в Excel
worksheet.cells.item[i,1].value:=gruz["gr"];
подсчитываю по грузу количество
cnt.close; вот на этой строке выдается ошибка. То есть первый раз проходит нормально, а после перехода на следующую строку и возвращения на эту команду выдается ошибка
cnt.parameters[0].value:=gruz["gr"];
cnt.parameters[1].value:=gruz["soob"];
cnt.open;
worksheet.cells.item[i,1].value:=cnt["vs"];
gruz.next;
end;


 
Digitman ©   (2003-11-20 13:49) [4]

а что такое q2 ? откуда тут оно взялось ?


 
Лариса   (2003-11-20 13:52) [5]

q2 -это просто ошибка? я уже заметила ее


 
Johnmen ©   (2003-11-20 13:52) [6]

http://delphimaster.net/view/3-1069069158/


 
Лариса   (2003-11-20 13:55) [7]

Спасибо за ссылку, но вопрос мой она не решает


 
Johnmen ©   (2003-11-20 13:57) [8]

Да, ссылка не решает. Но то, что там написано - полностью.
:)))


 
chtr ©   (2003-11-20 13:58) [9]

А запрос не пустой?


 
Лариса   (2003-11-20 14:01) [10]

Нет запрос не пустой.Получается, что когда первая или последняя записи и пытаешься закрыть query, то такая ошибка возникает


 
Digitman ©   (2003-11-20 14:14) [11]

ну раз так, то попробуй явно встать на первую запись

// cnt.Close; // никчему держать НД подолгу открытым

//задали параметры
cnt.parameters[0].value:=gruz["gr"];
cnt.parameters[1].value:=gruz["soob"];
//попытались открыть НД
cnt.open;
try
cnt.First; //успешно открыли, пытаемся встать на 1-ю запись НД, предполагая что RecordCount > 0
try
//успешно встали на 1-ю запись, читаем ее
worksheet.cells.item[i,1].value:=cnt["vs"];
finally
// НД больше незачем держать открытым, тут же закрываем его безусловно
cnt.Close; //!!
end;
except
.. // что-то с First не так, принимаем меры
end;


 
Лариса   (2003-11-20 14:21) [12]

Не выходит. При попытке сделать close опять ошибка. Получается, что с first все нормально, а вот с закрытием проблема.


 
Vlad ©   (2003-11-20 14:23) [13]


> Лариса (20.11.03 14:01) [10]

Лариса, вам же сказали - это баг в АДО.
Надо ставить апдейт


 
Лариса   (2003-11-20 14:28) [14]

> Vlad А зачем апдейт? И как поставить?


 
Vlad ©   (2003-11-20 14:30) [15]


> Лариса (20.11.03 14:28) [14]

это не тот апдейт, который SQL UPDATE
Это апдейт для АДО. Обновление.
Ставить за тем чтобы не глючило.
Ссылку не помню, где-то она тут в форуме была, поищите.


 
Лариса   (2003-11-20 14:34) [16]

:) я поняла, что не тот апдейт.
Хорошо, спасибо, поищу.


 
sniknik ©   (2003-11-20 14:37) [17]

Vlad © (20.11.03 14:30) [15]
записывать надо
пиши это сдесь http://borland.com ;о))

а еще сдесь http://se-ed.net/thaidelphicc/xml/updatepack/


 
Digitman ©   (2003-11-20 14:37) [18]


> Лариса


дался тебе этот АДО)

брось его, тебе же для твоей задачи не требуется ни совместимость с TDataSet ни визуализация открываемых НД, тебе просто в Excel нужно скопировать что-то из этих НД

просто создай экз-р объекта DAO.DBEngine и обращайся к нему точно так же , как если бы ты это делала в Access VBA : CreateWorkspase(), OpenDatabase(), OpenRecordset() и т.п.

минимальные накл.расходы дадут достатосно эффективный и надежный код, лишенный упомянутых "глюков"


 
Digitman ©   (2003-11-20 14:46) [19]

просто как иллюстрация простоты подхода к решению похожей задачи :



procedure LoadDBEngine;
begin
try
DBEngine := CreateOleObject("DAO.DBEngine.36");
except
try
DBEngine := CreateOleObject("DAO.DBEngine.35");
except
DBEngine := Null;
raise;
end;
end;
end;

var
Ws: OleVariant;
Db: OleVariant;
Rs: OleVariant;
begin
NfoPartBaseFound := False;
NfoPartRFound := False;
try
try
LoadDBEngine;
DBEngine.SystemDB := ArgoWGPath;
Ws := DBEngine.CreateWorkspace("", ArgoDBUserName, ArgoDBUserPwd, 2);
Db := Ws.OpenDataBase(ArgoDBPath, False, True, EmptyParam);
Rs := Db.OpenRecordSet("SELECT Sum(Kol1) AS TotalQty FROM [Запчасти " + ArgoDBDefStock + "] WHERE Kol1 IS NOT NULL GROUP BY Cod HAVING Cod LIKE "" + NfoOrigPartNo + """);
NfoPartBaseFound := True;
if Rs.RecordCount > 0 then
begin
NfoPartR := Rs.Fields["TotalQty"].Value;
NfoPartR := Round(NfoPartR * 1000)/1000;
NfoPartRFound := True;
end;
except
on e:Exception do
begin
if e is EOleSysError then
with EOleSysError(e) do
case loword(errorcode) of
499: DBEerrmsg := "Программное обеспечение доступа к базам данных MS DAO не установлено";
3028: DBEerrmsg := "Файл рабочей группы не найден";
3358: DBEerrmsg := "Файл рабочей группы поврежден";
3029: DBEerrmsg := "Неверное имя пользователя и/или пароль пользователя рабочей группы";
3024: DBEerrmsg := "Файл базы данных не найден";
3343: DBEerrmsg := "Файл базы данных поврежден";
3078: DBEerrmsg := "В базе данных не найдена таблица со сведениями о состоянии склада";
3112: DBEerrmsg := "Нет прав на чтение инф-ции о состоянии склада";
else
DBEerrmsg := "Незарегистрированное исключение EOleSysError, код: " + IntToStr(loword(errorcode)) + ", описание: " + e.Message;
end
else
DBEerrmsg := "Незарегистрированное исключение, класс: " + e.ClassName + ", описание: " + e.Message;
end;
end;
finally
Rs := Unassigned;
Db := Unassigned;
Ws := Unassigned;
end;



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

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

Наверх




Память: 0.51 MB
Время: 0.018 c
14-36804
ИдиотЪ
2003-11-20 11:46
2003.12.12
а вот представьте ...


7-36868
--olg-
2003-10-03 09:53
2003.12.12
Управление притером через WinSpool (WinXP)


1-36708
timak
2003-12-02 15:48
2003.12.12
Помогите найти QRStringGrid


1-36712
Clift
2003-12-02 15:21
2003.12.12
FileName


14-36818
RealRascal
2003-11-19 22:26
2003.12.12
Москва, сравним цены?