Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не исполняется запрос в коде, Acess Vilation 
:(
    Опции темы
bartram
Дата 25.7.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Сабж!!
Делаю запрос:
Код

procedure TStatRegion.Button1Click(Sender: TObject);
begin
 sql1.Close;
sql1.SQL.Clear;
sql1.SQL.Add('SELECT rg.name, Count(cr.ID_Region)');
sql1.SQL.Add('FROM Corespondents AS cr LEFT JOIN Region AS rg ON cr.ID_Region=rg.ID');
sql1.SQL.Add('WHERE cr.ID_Contry = 1');
sql1.SQL.Add('GROUP BY rg.name');
sql1.SQL.Add('ORDER BY rg.name;');
sql1.Open;
end;

В Дизайн тайм всё работает, а в Run time нет smile
Подскажите что делать?


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
DEER
Дата 25.7.2005, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



У меня была такая же проблема....
Я до сих пор грешу на саму Дельфю....
Я боролся с этим так: компилировал проект, а потом запускал экзесшку из под эксплорера, почему то так работало


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Bes
Дата 25.7.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



во первых все таки не
sql1.Open;
а
sql1.active:=true;
smile
а во вторых в T-SQL-е не допускается такая конструкция Group by order by и нечего тут грешить на дельфю тут надо пользоваться СКУЛ командой having если я вас правильно понял конечно

PM MAIL   Вверх
Петрович
Дата 25.7.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(Bes @ 25.7.2005, 15:43)
во первых все таки не
sql1.Open;
а
sql1.active:=true;

а во вторых в T-SQL-е не допускается такая конструкция Group by order by и нечего тут грешить на дельфю тут надо пользоваться СКУЛ командой having если я вас правильно понял конечно


По поводу Open и Active ты не прав. Оба варианта это по сути синонимы.

По поводу 'Group by order by' не скажу, точно не знаю. Но bartram утверждает что из дизайн-тайма такой запрос выполняется.

Цитата(bartram @ 25.7.2005, 11:51)
Сабж!!
Делаю запрос:
....
В Дизайн тайм всё работает, а в Run time нет 
Подскажите что делать?

А что значит "в Run time нет"? Так прямо и пишет "Не работаю"? smile

На всякий случай сразу спрошу: А ты компонент sql1-то создал?



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
kobra
Дата 25.7.2005, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



Цитата(Bes @ 25.7.2005, 14:43)
а во вторых в T-SQL-е не допускается такая конструкция Group by order by и нечего тут грешить на дельфю тут надо пользоваться СКУЛ командой having если я вас правильно понял конечно
а причем тут having?
order by - сортировщик а
having - филтр.

PM MAIL   Вверх
Vit
Дата 25.7.2005, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Bes @ 25.7.2005, 05:43)
во вторых в T-SQL-е не допускается такая конструкция Group by order by и нечего тут грешить на дельфю тут надо пользоваться СКУЛ командой having если я вас правильно понял конечно



Допускается.

Ошибку в студию! Код должен работать. Если не работает то причина в доступе к базе данных...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
bartram
Дата 25.7.2005, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Петрович, говорит Acess Volatiion и что какая то ошибка в модуле таком то... адресе таком то..., и в библиотеке MsJet4.0 smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Vit
Дата 25.7.2005, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



sql1 - это какого типа переменная?


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Bes
Дата 26.7.2005, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



Цитата
Цитата (Bes @ 25.7.2005, 14:43)
а во вторых в T-SQL-е не допускается такая конструкция Group by order by и нечего тут грешить на дельфю тут надо пользоваться СКУЛ командой having если я вас правильно понял конечно

а причем тут having?
order by - сортировщик а
having - филтр.


точно точно сорри просто я такую проблему решил с помощью having правда group by order by так и не заработала

Цитата
По поводу Open и Active ты не прав. Оба варианта это по сути синонимы.

да мы тут просто с Бартрамом спорили по этому поводу это к прошлой теме, помоему эти два метода даже реализованы одинаково просто для меня логичнее для тэйбла использовать Опен Клозе а для Квери Актив типа подключаю отключаю а тэйбл он все время прицеплен поэтому я его открываю закрываю - так просто условности

P.S. будет интересно выяснить причину ошибки а то я так и не допер smile

Это сообщение отредактировал(а) Bes - 26.7.2005, 08:17
PM MAIL   Вверх
bartram
Дата 26.7.2005, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Цитата(Vit @ 25.7.2005, 21:25)
sql1 - это какого типа переменная?

Код

sql1: TADOQuery;



--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Петрович
Дата 26.7.2005, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



bartram, а sql1 это компонент лежащий на форме, или ты его создаешь динамически?
И вообще, постарайся сделать как можно более простую форму на которой можно продемонстрировать ошибку, и выложи ее сюда. В приведенном коде, вроде ничего криминального не видно.



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
kobra
Дата 26.7.2005, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 15.6.2005
Где: Грузия, Тбилиси

Репутация: 1
Всего: 9



попробуи отклучить от sql1 TDataSource и правер что будет.

PM MAIL   Вверх
Bes
Дата 26.7.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 806
Регистрация: 8.12.2004

Репутация: 2
Всего: 7



у меня получилось действительновсе работает видно крепко я тормознул
испытывал на SQLServer2000 Delphi6 ADOQuery
запрос
Код

select count(*) as qnt, kod from MyTab1 group by kod order by qnt desc
все компоненты на форме но выключены после запуска нажимается кнопка в которой следующий код
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.Connected:=true;
//ADOQuery1.Active:=true;
ADOQuery1.Open;
end;

попробовал и с Активе и с Опен все сработало

Это сообщение отредактировал(а) Bes - 26.7.2005, 12:53
PM MAIL   Вверх
SergeBS
Дата 26.7.2005, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



bartram
1. Попробуй то же самое запихнуть в ADOCommand, если сработает - ну понятно, что в корзину отправить smile
2. Допустим не сработало - версию MDAC в студию. А то я через ADOCommand еще и не такой изврат устраивал, и либо и в design и в run - везде работало, либо нигде (почему не работало - сам догадайся).

Да, Query у тебя подключен самостоятельно? Если нет - Connection ?

И конечно для страховки выполни запрос в Query Analyzer - там он проходит?
PM MAIL   Вверх
bartram
Дата 26.7.2005, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Цитата
bartram, а sql1 это компонент лежащий на форме, или ты его создаешь динамически?

Лежит на форме


Цитата(SergeBS @ 26.7.2005, 13:35)
Да, Query у тебя подключен самостоятельно? Если нет - Connection ?

Он подключён к коннекшн smile
Цитата
И вообще, постарайся сделать как можно более простую форму на которой можно продемонстрировать ошибку, и выложи ее сюда. В приведенном коде, вроде ничего криминального не видно.

Ладно сделаю
smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
bartram
Дата 28.7.2005, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Петрович, я сделал пример вот посмотри всё вроде нормально но ошибка smile
http://bartram.com.ru/files/my/db.zip

Не знаю что делать smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Петрович
Дата 28.7.2005, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Приведенный тобой пример у меня прекрасно работает. Только пришлось добавить в конец TForm1.Button1Click оператор sql1.Open.
Так что проблема где то у тебя в системе/настройках/пакетах и пр.
В таком случае, могу лишь посоветовать подключить модули с отладочной информацией и пошагово пройтись в sql1.Open что бы понять какое действие конкретно вызывает ошибку.
Ну и конечно можно попробовать переустановить Jet.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
bartram
Дата 28.7.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Цитата
Так что проблема где то у тебя в системе/настройках/пакетах и пр.

Блин Делфи не давно же переставил, что опять ? smile smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
bartram
Дата 31.7.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Переустановка Делфи и Системы не помогла smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Петрович
Дата 31.7.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Дык я думаю что надо не делфи переставлять, а скорее всего мс-офис. Свежий JET обычно с ним идет, или с SP виндов.
А можно просто снять с сайта микрософта максимально свежий движок JET (кажется называется что-то вроде то вроде MDAC)



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
SergeBS
Дата 1.8.2005, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



bartram
Есть у меня предположение, переходящее в уверенность, что у тебя где-то косяки с активизацией.
В design-то работает:
Цитата

Приведенный тобой пример у меня прекрасно работает. Только пришлось добавить в конец TForm1.Button1Click оператор sql1.Open


И шагай еще вперед, к мелкомягким в гости. smile

Цитата

Набор программного обеспечения разработчика для доступа к данным Microsoft (Microsoft Data Access Software Development kit) (dasdksa.exe, 36 MB) с сайта Microsoft. Если Вы имеет модем со скоростью передачи 28 KB, то имеются файлы меньшего размера, доступные для загрузки, но которые не являются полным комплектом SDK. Переходите к http://www.microsoft.com/data/download.htm. Там Вы найдете как полный SDK, так и файлы меньшего размера.

Точнее, на март там лежал
URL: http://download.microsoft.com/download/c/f...48/MDAC_TYP.EXE
5.3 Мб, MDAC V 2.8
Еще полезно
URL: http://download.microsoft.com/download/8/4...91a7/cc_pkg.exe
Эта фигатура покажет, какая у тебя версия MDAC (а это не только ADO, а еще и DAO и ..., ну неважно).
Весит 220 кб. Вначале имеет смысл ее запустить - напишет, что у тебя не так smile.
Сам понимаешь - ссылки могут устареть. Но там все прозрачно видно, где что лежит. Есть только какой-то провокационный запрос, не помню какой. С ним проблемы не было. Имена файлов должны остаться те же.

Но скорее причина-таки в активизации. Как-нибудь к вечеру сдую твой пример и посмотрю.

PM MAIL   Вверх
SergeBS
Дата 1.8.2005, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



bartram
Твой пример как готовый exe (с добавлением, есс-но sql1.open) - работает.
В Delphi - ругается типа
Acces violation ... - ну ты сам знаешь smile
А теперь лекарство:
sql1.ParamCheck = false
(у тебя true - нафига не знаю, ты же параметры явно ввалил.).
И будет работать и при запуске из-под IDE.
IMHO Delphi тут не при чем. У меня Офис 97, а я полагаю у Петровича - 2000. Эти Access-ы резко различаются по глючизму. smile

PM MAIL   Вверх
SergeBS
Дата 7.8.2005, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 11
Всего: 22



bartram
Вдогонку:
Я тут в DelphiKingdom статейках немного полазил по своим делам, а заодно и по твоей проблеме нашлось:

ADO.OLEDB.JET.Access Violation при передаче неполного параметра

Цитата

Некоторый, вполне типичный, код заполнения запроса в процессе выполнения вызывает Access Violation, притом, что согласно документации все должно работать корректно.

Пример кода:
Допустим, есть база данных в MS Access 2000, имеющая таблицу main и в ней целочисленное (INT) поле id в качестве главного ключа. Так же есть компонент ADOQuery1: TADOQuery, для доступа к базе данных. Максимальное значение поля id может быть получено следующим кодом:

ADOQuery1.Active:=false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT max(id)'); // -- Сбой здесь !!!
ADOQuery1.SQL.Add('AS idmax');
ADOQuery1.SQL.Add('FROM main');
ADOQuery1.Active:=true;


Как у тебя, короче. Лечение - формировать строку запроса за 1 раз, т.е. не 3 ADD, а 1. До ADDа запрос сформировать в строке. Подробнее - в статье.

PM MAIL   Вверх
bartram
Дата 7.8.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



SergeBS, спасибо тебе за беспокойства но я уже решил свою проблему вот так:
Код

procedure TStatRegion.Button1Click(Sender: TObject);
begin
sql1.SQL.Text := 'SELECT rg.name, Count(cr.ID_Region)' +' FROM Corespondents AS cr LEFT JOIN Region AS rg ON cr.ID_Region=rg.ID'
                  +' WHERE cr.ID_Contry ='+ ListContry.Text
                  +' GROUP BY rg.Name'
                  +' ORDER BY rg.Name';
sql1.Open;
end;


Спасибо Петровичу smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Петрович
Дата 7.8.2005, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



SergeBS Прав. Проблема возникает тогда, когда в sql1.SQL присвоен не полный запрос. Тогда, если ParamCheck = True, компонент пытается выполнить синтаксический разбор SQL-оператора для определения наличия в нем параметров. Так вот, почему-то, при работе из-под IDE Delphi 7, при разборе 'SELECT rg.name, Count(cr.ID_Region)' вызникает эта ошибка.
Выходов два. Либо присваивать весь оператор целиком (как в последнем посте), либо цстановить компоненту ParamCheck = False.
Кстати, под Delphi 6, ошибка не возникает.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
bartram
Дата 7.8.2005, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: нет
Всего: 29



Цитата
Кстати, под Delphi 6, ошибка не возникает.

Вот это для меня загадка smile


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.