Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

При Open у TQuery c RequestLive = True получаю AV&#133


Страницы:   1 2

Kolan ©   (2008-01-09 18:18:00) 

Такой код на строке Open вызывает AV по адресу 00000000.

function TPeriodDataAccessService.GetApprovedMonthPeriods: TDataSet;
var
 Query: TQuery;
begin
 Result := nil;
 Query := TQuery.Create(nil);
 {Iano?ieou Query}
 Query.RequestLive := True;
 try
   with Query do
   begin
     DatabaseName := 'db';
     SQL.Clear;
     SQL.Add('SELECT cdmes AS [Ianyo], utvper AS [Oaenoiaue aea(noa?ue)], daten AS [C], datev AS [Ii] FROM PAKETDOC ');
      Open;
   end;
 except
   Query.Close;
   Query.Free;
 end;
 Result := Query;
end;


Почему? Как исправить?


Loginov Dmitry   (2008-01-12 16:18:00) [1]

А если так переписать:

function TPeriodDataAccessService.GetApprovedMonthPeriods: TDataSet;
var
Query: TQuery;
begin
Query := TQuery.Create(nil);
try
  Query.RequestLive := True;
  with Query do
  begin
    DatabaseName := 'db';
    SQL.Text := 'SELECT cdmes as t."Ianyo", utvper as t."Oaenoiaue aea(noa?ue)", daten as t."C", datev as t."Ii" FROM PAKETDOC';
    Open;
  end;
except    
  Query.Free;
  raise;
end;
Result := Query;
end;


Kolan   (2008-01-12 15:05:00) [2]

> тип базы видать такой, секретный.

MSSQL Server 2000


> ты пройди дальше в CreateHandle

В ПН продолжу…


sniknik   (2008-01-11 12:16:00) [3]

> Query := TQuery.Create(nil);
> :)
точно блин... ;(

ну тогда сегодня день чудес... проверил сам запрос для BDE -> MSSQL, никаких AV от смены названия... и [] и "" проходят "только в путь"
и RequestLive  не влияет...

чтото там не то. тип базы видать такой, секретный.

еще вариант... основан на странных кавычках в [13]
а не умудряешся ли ты посылать запрос в юникоде? /другой кодировке отличной от win-1251.


clickmaker   (2008-01-11 12:05:00) [4]


> [19] sniknik ©   (11.01.08 11:59)
> хм... а у тебя случаем не созданы поля в "десигне"

Query := TQuery.Create(nil);
:)


sniknik   (2008-01-11 11:59:00) [5]

хм... а у тебя случаем не созданы поля в "десигне" по оригинальным названиям? после меняешь имена, старые поля остались с несуществующими ссылками, но гдето есть обращение вот и AV...
а вернул старые названия и все встало на свои места, ссылки валидны...


clickmaker   (2008-01-11 11:51:00) [6]


> [16] Kolan ©   (11.01.08 11:32)

ты пройди дальше в CreateHandle, может, что и прояснится


Kolan   (2008-01-11 11:50:00) [7]

Тоже ав в том же месте…


Kolan   (2008-01-11 11:32:00) [8]

> какие-то кавычки у тебя жесткие

:)

> просто любопытно в чем дело.

Шас проверю.


Правильный_Вася   (2008-01-11 11:29:00) [9]


> Kolan ©   (11.01.08 11:15) [13]

какие-то кавычки у тебя жесткие


sniknik   (2008-01-11 11:27:00) [10]

может дело в самих алиасах? значениях.
если
SQL.Add('SELECT cdmes AS "Field1", utvper AS "Field2", daten AS "Field3", datev AS "Field4" FROM PAKETDOC');
?
и вдруг пройдет, восстанавливай по одному из оригиналов.
просто любопытно в чем дело.


Kolan   (2008-01-11 11:15:00) [11]


> но проверь с ними SELECT cdmes AS «Ianyo

SQL.Add('SELECT cdmes AS „Месяц“, utvper AS „Текстовый вид(старый)“, daten AS „C“, datev AS „По“ FROM PAKETDOC ');

тожесамое AV.


clickmaker   (2008-01-11 11:12:00) [12]

в D7/BDE/MSSQL, кстати, такой код выводит "Table is read only", но не AV


sniknik   (2008-01-11 11:07:00) [13]

не указана база... но по компонентам вроде BDE, а в BDE вроде скобки [] не приняты, а приняты кавычки "".
поздновато конечно, но проверь с ними SELECT cdmes AS "Ianyo", utvper AS .... так же само.
(естественно в рабочем варианте оставить решение из [9], либо аналог (например в гриде "титлы" с нужными именами сделать, тогда и присваивать после запроса ничего не надо))


clickmaker   (2008-01-11 10:56:00) [14]


> [9] Kolan ©   (11.01.08 10:01)

так, кстати, лучше. Потому как можно в ресурсы всю локализацию вынести


Kolan   (2008-01-11 10:01:00) [15]

Победил так:

SQL.Add('SELECT cdmes, utvper, daten, datev  FROM PAKETDOC ');
Open;
FieldByName('cdmes').DisplayLabel := 'Месяц';
FieldByName('utvper').DisplayLabel := 'Текстовый вид(старый)';
FieldByName('daten').DisplayLabel := 'C';
FieldByName('datev').DisplayLabel := 'По';


Kolan   (2008-01-11 09:47:00) [16]

> отладчиком в Open заходил?

Нет. Шас. Так…

Заходим сюда:
OpenCursor;

Теперь сюда:
procedure TDBDataSet.OpenCursor(InfoQuery: Boolean);
begin
 SetDBFlag(dbfOpened, True);
  inherited OpenCursor(InfoQuery);
 SetUpdateMode(FUpdateMode);
 if Database.IsSQLBased then
   SetupAutoRefresh
end;



procedure TBDEDataSet.OpenCursor(InfoQuery: Boolean);
var
 CursorLocale: TLocale;
begin
 if FHandle = nil then
    FHandle := CreateHandle;
тут АВ.

а если без AS

То работает.

Что такое TPeriodDataAccessService?
Синглетон в котором находятся методы доступа к БД.

ЗЫ
 Сорри за молчание…


Правильный_Вася   (2008-01-10 12:49:00) [17]


> это только мои предположения

позновато ты их озвучил, когда носом ткнули в писаную тобой фигню


Lexer   (2008-01-10 12:45:00) [18]

>Правильный_Вася   (10.01.08 12:09)

сказано "c RequestLive = True получаю AV", так что это только мои предположения что SQLQUERYMODE установлен не LOCAL


Правильный_Вася   (2008-01-10 12:09:00) [19]


> при RL = True запрос выполняет само bde а не сервер

во-1 про сервер или не сервер ни слова не сказано
во-2 кто выполняет запрос определяется настройкой драйвера в БДЕ
SQLQRYMODE specifies the mode for handling queries to SQL data


Lexer   (2008-01-10 11:41:00) [20]

Если при RequestLive = False ошибок нет, то скорее всего ядро bde не понимает такой синтаксис, т.к. при RL = True запрос выполняет само bde а не сервер. Посмотри будет ли ошибка при элементарном запросе.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо