Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.12.12;
Скачать: [xml.tar.bz2];

Вниз

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

 
Лариса   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
1-36749
LAMER-XP
2003-12-02 01:06
2003.12.12
Автоматический преход к следующей закладке в PageControl e


7-36858
SlavaZ
2003-10-07 14:55
2003.12.12
Как узнать температуру CPU


6-36781
AAZ72
2003-10-15 18:23
2003.12.12
Использование WebBrowser


1-36593
GreySerg
2003-12-01 18:20
2003.12.12
Как получить доступ к свойствам объекта , у которого есть PopupM


1-36655
sergeant
2003-11-30 19:38
2003.12.12
Забавная история...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский