Форум: "Базы";
Текущий архив: 2008.06.15;
Скачать: [xml.tar.bz2];
ВнизПри 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 заходил?
Нет. Шас. Так…
Заходим сюда: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?
Синглетон в котором находятся методы доступа к БД.
ЗЫ
Сорри за молчание…
← →
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]Тоже ав в том же месте…
← →
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
В ПН продолжу…
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.007 c