Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.15;
Скачать: CL | DM;

Вниз

При Open у TQuery c RequestLive = True получаю AV&#133   Найти похожие ветки 

 
Kolan ©   (2008-01-09 18:18) [0]

Такой код на строке 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;


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


 
clickmaker ©   (2008-01-09 18:23) [1]


> Kolan ©   (09.01.08 18:18)

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


 
Правильный_Вася   (2008-01-09 18:40) [2]

а если без AS


 
Johnmen ©   (2008-01-09 21:31) [3]


> Kolan ©   (09.01.08 18:18) 

Что такое TPeriodDataAccessService?


 
Lexer ©   (2008-01-10 11:41) [4]

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


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


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

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


 
Lexer ©   (2008-01-10 12:45) [6]

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

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


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


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

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


 
Kolan ©   (2008-01-11 09:47) [8]

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

Нет. Шас. Так&#133

Заходим сюда:
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?
Синглетон в котором находятся методы доступа к БД.

ЗЫ
 Сорри за молчание&#133


 
Kolan ©   (2008-01-11 10:01) [9]

Победил так:

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


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


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

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


 
sniknik ©   (2008-01-11 11:07) [11]

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


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

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


 
Kolan ©   (2008-01-11 11:15) [13]


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

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

тожесамое AV.


 
sniknik ©   (2008-01-11 11:27) [14]

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


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


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

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


 
Kolan ©   (2008-01-11 11:32) [16]

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

:)

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

Шас проверю.


 
Kolan ©   (2008-01-11 11:50) [17]

Тоже ав в том же месте&#133


 
clickmaker ©   (2008-01-11 11:51) [18]


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

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


 
sniknik ©   (2008-01-11 11:59) [19]

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


 
clickmaker ©   (2008-01-11 12:05) [20]


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

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


 
sniknik ©   (2008-01-11 12:16) [21]

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

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

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

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


 
Kolan ©   (2008-01-12 15:05) [22]

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

MSSQL Server 2000


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

В ПН продолжу&#133


 
Loginov Dmitry ©   (2008-01-12 16:18) [23]

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

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;



Страницы: 1 вся ветка

Текущий архив: 2008.06.15;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
2-1211539285
Fr1K
2008-05-23 14:41
2008.06.15
Печать


2-1211547311
МаксИкс
2008-05-23 16:55
2008.06.15
Как получить имя текущей формы ?


15-1209924570
axis_of_evil
2008-05-04 22:09
2008.06.15
проблема с outlook


15-1209988486
БарЛог
2008-05-05 15:54
2008.06.15
Где хранить "корзину" в интернет-магазине?


15-1210019900
Германн
2008-05-06 00:38
2008.06.15
Что такое JET 4.0