Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > люди помогите с ошибкой- не знаю че делать!


Автор: Anticler 13.6.2007, 17:28
Помогите пожалуйста - диплом через неделю!!! smile 

У меня прога с базами данных. Ввел данные - работала нормально, потом дополнил данные - все пипец!

Суть такова:
Кнопка - при помощи SQL с условием вводит суммы в таблицу.
Потом начала вылетать ошибка:
"Access violation at address 4BE34726 in module 'IDAPI32.DLL'. Read of address 00000000."

Прверял по строкам вылетала на Query.Open; 
А теперь вылетает на Query.Clear;

IdAPI32.dll - библиотека из BDE.
Даже незнаю, что и делать. На всех нормальных компах такая же фигня. smile 

Автор: Anark1 14.6.2007, 07:30
Код в студию

Автор: pseud 14.6.2007, 11:55
если Query у тебя выполняет не запрос SELECT а операции ISERT UPDATE DELETE
то не Open, а ExecSQL.

возможно у Query стоит убрать RequestLive.

а вообще


Цитата(Anark1 @  14.6.2007,  07:30 Найти цитируемый пост)
Код в студию


поддерживаю

Автор: Anticler 14.6.2007, 15:18
ВОТ КОД

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.add('SELECT COUNT( id ) as kol FROM "admn.DB" Adm ');
Query1.SQL.add('WHERE (Mes ='+ IntToStr( DBGridEh2.Col-4)+' ) AND (Adm."Year" = '+ ComboBox2.Text+')');

>Query1.Open;     // ************сначала здесь выбивало



Query1.Close;

>Query1.SQL.Clear;   // ************ А ТЕПЕРЬ ЗДЕСЬ 

Query1.SQL.add('SELECT COUNT( Adm.NorDok ) KOL');
Query1.SQL.add('FROM "admn.DB" Adm ');
Query1.SQL.add('   INNER JOIN "NorDocN.db" Nordocn   ON  (Adm.NorDok = Nordocn.Doc)');
Query1.SQL.add('   INNER JOIN "NorDocC.db" Nordocc   ON  (Nordocn.Id_cat = Nordocc.Id) ');
Query1.SQL.add('WHERE  (Adm."Year" = :yr) and (Adm.Mes = :ms)   ');
Query1.SQL.add('GROUP BY Nordocc.Id, Nordocc.Id ');
Query1.Prepare;
 Query1.ParamByName('yr').AsInteger := StrToInt( ComboBox2.text);
 Query1.ParamByName('ms').AsInteger := DBGridEh2.Col-4;
Query1.Open;

Добавлено через 2 минуты и 1 секунду
В Query ничего не выставлял все опции по умолчанию (кроме алиаса)

Автор: Rodman 14.6.2007, 15:35
а так?? 
Цитата(Anticler @  14.6.2007,  14:18 Найти цитируемый пост)
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.add('SELECT COUNT( id ) as kol FROM "admn.DB" Adm ');
Query1.SQL.add('WHERE (Mes ='+ IntToStr( DBGridEh2.Col-4)+' ) AND (Adm."Year" = '+ ComboBox2.Text+')');

>Query1.Open;

Код

Query1.SQL.Clear;
Query1.SQL.add('SELECT COUNT( id ) as kol FROM "admn.DB" Adm ');// "admn.DB" Adm  - что это такое (Adm)???
Query1.SQL.add('WHERE (Mes =:Prm1) AND (Adm.Year = :Prm2)');
Query1.ParamByName('Prm1').Value :=DBGridEh2.Col-4;
Query1.ParamByName('Prm2').Value :=ComboBox2.Text;
Query1.Open;



Цитата(Anticler @  14.6.2007,  14:18 Найти цитируемый пост)
Query1.Close;

>Query1.SQL.Clear;   // ************ А ТЕПЕРЬ ЗДЕСЬ 

Query1.SQL.add('SELECT COUNT( Adm.NorDok ) KOL');
Query1.SQL.add('FROM "admn.DB" Adm ');
Query1.SQL.add('   INNER JOIN "NorDocN.db" Nordocn   ON  (Adm.NorDok = Nordocn.Doc)');
Query1.SQL.add('   INNER JOIN "NorDocC.db" Nordocc   ON  (Nordocn.Id_cat = Nordocc.Id) ');
Query1.SQL.add('WHERE  (Adm."Year" = :yr) and (Adm.Mes = :ms)   ');
Query1.SQL.add('GROUP BY Nordocc.Id, Nordocc.Id ');
Query1.Prepare;
 Query1.ParamByName('yr').AsInteger := StrToInt( ComboBox2.text);
 Query1.ParamByName('ms').AsInteger := DBGridEh2.Col-4;
Query1.Open;


Код

Query1.Close;
Query1.SQL.Clear;   // ************ А ТЕПЕРЬ ЗДЕСЬ - что говорит - конкретно?
Query1.SQL.add('SELECT COUNT( Adm.NorDok ) KOL');
Query1.SQL.add('FROM "admn.DB" Adm ');
Query1.SQL.add('   INNER JOIN "NorDocN.db" Nordocn   ON  (Adm.NorDok = Nordocn.Doc)');
Query1.SQL.add('   INNER JOIN "NorDocC.db" Nordocc   ON  (Nordocn.Id_cat = Nordocc.Id) ');
Query1.SQL.add('WHERE  (Adm.Year = :yr) and (Adm.Mes = :ms)   ');
Query1.SQL.add('GROUP BY Nordocc.Id, Nordocc.Id ');
Query1.Prepare;
 Query1.ParamByName('yr').AsInteger := StrToInt( ComboBox2.text);
 Query1.ParamByName('ms').AsInteger := DBGridEh2.Col-4;
Query1.Open;


Adm."Year" - зачем кавычки?


Цитата(Anticler @  14.6.2007,  14:18 Найти цитируемый пост)
В Query ничего не выставлял все опции по умолчанию (кроме алиаса) 

ну хоть ConnectionString настроил!

Автор: pseud 14.6.2007, 16:26
Цитата(Rodman @  14.6.2007,  15:35 Найти цитируемый пост)
Query1.SQL.add('SELECT COUNT( id ) as kol FROM "admn.DB" Adm ');// "admn.DB" Adm  - что это такое (Adm)???


Rodman, ты меня удивил.

FROM "admn.DB" Adm  это тоже самое, что и FROM table_very_long_name AS t

например
Код

SELECT
  t.id,
  t.name
FROM
  table_very_long_name AS t

Автор: Anticler 14.6.2007, 18:10
Цитата(Rodman @  14.6.2007,  15:35 Найти цитируемый пост)
а так?? 


Уже пробовал и с параметрами и без них - все тоже самое!


Цитата(Rodman @  14.6.2007,  15:35 Найти цитируемый пост)
Adm."Year" - зачем кавычки?


А кавычки я из QueryBuilder взял. 
И потом все равно до туда не доходит  ошибка выскакивает на Query1.SQL.Clear; а может и на Close;

Цитата(Rodman @  14.6.2007,  15:35 Найти цитируемый пост)
"admn.DB" Adm  - что это такое (Adm)???


Это псевдоним (типа sum(field) as name)


Цитата(Rodman @  14.6.2007,  15:35 Найти цитируемый пост)
ну хоть ConnectionString настроил!


ConnectionString - что это?



PS : Я использую парадокс.

Автор: neat 14.6.2007, 19:27
Anticler, а не пробовал второй запрос формировать в другом Query? Это так, для проверки.

Автор: Anticler 15.6.2007, 08:25
Пробовал!

Автор: Rodman 15.6.2007, 08:36
Цитата(Anticler @  14.6.2007,  17:10 Найти цитируемый пост)
ConnectionString - что это?

строка подключения к базе!!! у тебя вообще подключение как реализованно!!!
Цитата(pseud @  14.6.2007,  15:26 Найти цитируемый пост)
Rodman, ты меня удивил.

ну так в каждой СУБД свои нюансы, я не увидел as и вот засомневался!!! Всего ведь знать нельзя!!!
Цитата(Anticler @  14.6.2007,  17:10 Найти цитируемый пост)
А кавычки я из QueryBuilder взял. 

ну так а СУБД какая?? или я не увидел?

Автор: pseud 15.6.2007, 08:49
Rodman, 
Цитата(Anticler @  14.6.2007,  18:10 Найти цитируемый пост)
PS : Я использую парадокс.


поэтому человек использует BDE
поэтому не стоит заморачиваться на ConnectionString (ADO)


Цитата(Anticler @  14.6.2007,  15:18 Найти цитируемый пост)

Query1.Close;
>Query1.SQL.Clear;   // ************ А ТЕПЕРЬ ЗДЕСЬ 


вообще не понимаю как такое возможно

Цитата(Anticler @  14.6.2007,  18:10 Найти цитируемый пост)
ошибка выскакивает на Query1.SQL.Clear; а может и на Close;


используй BreakPoint и определись таки на что. Но ни в одном ни в другом случае ошибки быть не должно.


Автор: Anticler 16.6.2007, 13:37
Цитата(pseud @  15.6.2007,  08:49 Найти цитируемый пост)
используй BreakPoint и определись таки на что. Но ни в одном ни в другом случае ошибки быть не должно.


Курсор стоит на Query1.SQL.Clear; 

Автор: Rodman 16.6.2007, 14:56
а если не чистить и делать так
Код

Query1.Close;
//Query1.SQL.Clear;   // ************ А ТЕПЕРЬ ЗДЕСЬ - что говорит - конкретно?
Query1.SQL.Text:='SELECT COUNT( Adm.NorDok ) KOL';//add('SELECT COUNT( Adm.NorDok ) KOL');
Query1.SQL.add('FROM "admn.DB" Adm ');
Query1.SQL.add('   INNER JOIN "NorDocN.db" Nordocn   ON  (Adm.NorDok = Nordocn.Doc)');
Query1.SQL.add('   INNER JOIN "NorDocC.db" Nordocc   ON  (Nordocn.Id_cat = Nordocc.Id) ');
Query1.SQL.add('WHERE  (Adm.Year = :yr) and (Adm.Mes = :ms)   ');
Query1.SQL.add('GROUP BY Nordocc.Id, Nordocc.Id ');
Query1.Prepare;
 Query1.ParamByName('yr').AsInteger := StrToInt( ComboBox2.text);
 Query1.ParamByName('ms').AsInteger := DBGridEh2.Col-4;
Query1.Open;

Автор: Anticler 16.6.2007, 21:00
Люди заработало !!! smile 

Причем, абсолютно ничего не менял !!!

Даже не знаю что могло повлиять. Неделю парился  и тут вдруг работает без ошибок. 

Запускаю старый ехе - эта ошибка, а новый только что откомпилированный - как часики!!

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

Скорее всего глюк компилятора Delphi 7.

Надеюсь болше этой ошибки я не увижу.

И спасибо всем за то что попытались помочь мне (все ваши варианты испробовал).


PS: И тему можно закрыть чтоб глаза не мазолила

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)