![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADO SQL SUM(Field) - ошибка в IDE Access violation ... 1B041FC6 [D7, JET]
azamatufa © (2007-06-28 11:06:00)Привет мастерам Дельфей!
Разрешите вопрос в студию.
Работю с TADOQuery, база JET (access).
пишу
Query.SQL.Add('SELECT SUM(Num)'); // (*) <----
Query.SQL.Add('FROM Table1');
Жму F9 и в момент (*) вылетает ошибка Access Violation по адресу... in module 'msjet40.dll..." - НО прога продолжает работать... не нравится ему, понимаешь, сумма.. =)
А если же запускаю exe-шник без дельфей - ошибок нет..
Может кто сталкивался?
Заранее благодарен!
С/у.
Ega23 (2007-06-29 11:57:00) [1]
> а почему их не стоит использовать???
А потому, что:
> Слов нет.. я почти год уже... Access Violation уже стал
> моим другом...
> а тут.. красота... вот ведь...
Anatoly Podgoretsky (2007-06-29 11:56:00) [2]> azamatufa (29.06.2007 11:43:17) [17]
Потому что костыль.
azamatufa (2007-06-29 11:43:00) [3]
> все больше и больше вопросов именно по "корявым" компонентам,
> нормальных будто бы и не существует...
ну у меня только вот одна проблемка и возникла так то...
я не такой спец, конечно, больше юзер этих компонент, но вроде устраивают ADOQuery, ADOTable..
а почему их не стоит использовать???
Игорь Шевченко (2007-06-29 10:45:00) [4]Плохиш © (28.06.07 18:28) [13]
> Так критерия-то конца вставки запроса нету...
А он и нафиг не сдался
sniknik (2007-06-28 20:21:00) [5]кстати тут минимум раз в два дня мелькают предупреждения - не пользуйтесь борландовскими "костылями" (ADOTable, ADOQuery, ADOStoredProc) пользуйтесь основными (ADOCommand, ADODataSet)... и хоть бы кто послушал.
наоборот, все больше и больше вопросов именно по "корявым" компонентам, нормальных будто бы и не существует...
sniknik (2007-06-28 20:12:00) [6]> Интересно, это только в ADO такое сделано ...
это не в ADO, это в интерпретации от борланда для их "облегчительнопереходныхсBDE" компонент.
а у "родного" ADO попросту нет возможности вносить запрос частями... соответственно нет и механизма "разруливания" сего действия.
Плохиш (2007-06-28 18:28:00) [7]
> Интересно, это только в ADO такое сделано, что при построчном
> добавлении текста запроса тут же выполняется его разбор
Так критерия-то конца вставки запроса нету...
Игорь Шевченко (2007-06-28 17:58:00) [8]Интересно, это только в ADO такое сделано, что при построчном добавлении текста запроса тут же выполняется его разбор или еще где мудрецы постарались ?
sniknik (2007-06-28 12:24:00) [9]вообще вместо всяких "изгаляний" с BeginUpdate; можно просто запрос в одну строку написать (или как 1 вариант в [6] через Text, (тоже 1 получается)), и все.
ну а лучше бы использовать нормальный ADODataSet, он лишон подобных недостатков. неправильно запрос и не добавишь...
ЮЮ (2007-06-28 11:55:00) [10]Когда так говорят "Спасибо", наверное "Пожалуйста" просто необходимо :)
azamatufa (2007-06-28 11:44:00) [11]
> Почему-то тут отсутствую строки из укороченной версии :)Разбором
> синтаксиса здесь и не пахнет(если над компонентом Query
> специально не поизгалялся), поэтому что SUM, что не SUM
> - все равно.Если ошибка действительно здесь, то или сразу
> присваитвать SQL.Textprocedure TForm1.Button1Click(Sender:
> TObject);begin Query.Close; Query.SQL.Text := 'SELECT
> SUM(One)' + 'FROM Form6'; Query.Open;end;или Query.
> SQL.BeginUpdate; Query.SQL.Clear; Query.SQL.Add('SELECT
> SUM(One)'); Query.SQL.Add('FROM Form6'); Query.SQL.EndUpdate;
>
Господи, где ж ты был все это время, родной!!!
Как тебе переслать пару банок пива?? ;)
Слов нет.. я почти год уже... Access Violation уже стал моим другом...
а тут.. красота... вот ведь...
Большое человеческое спасибо!!!
azamatufa (2007-06-28 11:39:00) [12]
> ЮЮ
пошел пробовать....
azamatufa (2007-06-28 11:38:00) [13]
> Убей Query и создай заново...
так тоже не помогает:
procedure TForm1.Button1Click(Sender: TObject);
var
Q: TADOQuery;
begin
Q := TADOQuery.Create(nil);
Q.Connection := DM.DB_Connection;
Q.Close;
Q.SQL.Clear;
Q.SQL.Add('SELECT SUM(Kolvo)');
Q.SQL.Add('FROM Table1');
DS.DataSet := Q; // data source
Q.Open;
Q.Free;
end;
ладно, видно у меня че-то не то то ли с АДО до ли Вендами.. то ли Дельфями... так то работать можно.. но..
спасибо всем за оперативное участие!!!
ЮЮ (2007-06-28 11:33:00) [14]> вот полная версия
Почему-то тут отсутствую строки из укороченной версии :)
Разбором синтаксиса здесь и не пахнет(если над компонентом Query специально не поизгалялся), поэтому что SUM, что не SUM - все равно.
Если ошибка действительно здесь, то или сразу присваитвать SQL.Text
procedure TForm1.Button1Click(Sender: TObject);
begin
Query.Close;
Query.SQL. Text:=
'SELECT SUM(One)' +
'FROM Form6';
Query.Open;
end;
или
Query.SQL. BeginUpdate;
Query.SQL.Clear;
Query.SQL.Add('SELECT SUM(One)');
Query.SQL.Add('FROM Form6');
Query.SQL. EndUpdate;
Johnmen (2007-06-28 11:27:00) [15]Убей Query и создай заново...
azamatufa (2007-06-28 11:22:00) [16]
> Можно подумать, если будет Query.SQL.Add('SELECT Num');
> то AV исчезнет
имеено так, уважаемый!
только что кнопку 2 сделал:
procedure TForm1.Button2Click(Sender: TObject);
begin
Query.Active := false;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT One');
Query.SQL.Add('FROM Form6');
Query.Active := true;
Query.Open;
end;
- никаких проблем, показал в гриде поле One (все записи).
azamatufa (2007-06-28 11:19:00) [17]
> НД открыт, или нет? Если открыт, то закрой.
закрыта!
вот полная версия
procedure TForm1.Button1Click(Sender: TObject);
begin
Query.Active := false; // ну это излишек так то... но поставил..
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('SELECT SUM(One)');
Query.SQL.Add('FROM Form6');
Query.Active := true;
Query.Open;
end;
Query - компонент на форме.
ЮЮ (2007-06-28 11:17:00) [18]> НО прога продолжает работать
А чего бы ей не работать из-за того, что в одном из обработчиков произошла ошибка.
> Может кто сталкивался?
С Access Violation? Да тысячи раз. После исправления ошибок - пропадают :)
P.S. Приведи весь код метода, с заголовком и локальными переменными. В твоих двух строках кода - информации - ноль.
> не нравится ему, понимаешь, сумма
Можно подумать, если будет Query.SQL.Add('SELECT Num'); то AV исчезнет
Ega23 (2007-06-28 11:14:00) [19]
> Query.SQL.Add('SELECT SUM(Num)'); // (*) <----
> Query.SQL.Add('FROM Table1');
НД открыт, или нет? Если открыт, то закрой.