Добрый день, ест такая проблемка:работаю на Delphi 6.0 c IBE, есть такая часть кода:
[pascal]
...
var
ClnBnk: tIBClientDataSet;
ClnNakl: tIBClientDataSet;
dtPlat, dtNakl: TDateTime;
N_A: string;
sDtn, sDtE : string;
sNomSh, dDtSHET : string;
....
dtNakl :=ClnNakl.FieldByName('DTSHET_D').AsDateTime;
dtPlat :=ClnBnk.FieldByName('DOCDATE').AsDateTime;
....
/pascal]
всё компилируется, но во время работы приложения, если попытаться включить данную процедуру
выскакивает сообщение о том, что поле 'DTDHT_D' не существует. В чём может быть замес?
Заранее благодарен за помощ.
L>[pascal]
L> ...
L>var
L> ClnBnk: tIBClientDataSet;
L> ClnNakl: tIBClientDataSet;
L> dtPlat, dtNakl: TDateTime;
L> N_A: string;
L> sDtn, sDtE : string;
L> sNomSh, dDtSHET : string;
L> ....
L> dtNakl :=ClnNakl.FieldByName('DTSHET_D').AsDateTime;
L> dtPlat :=ClnBnk.FieldByName('DOCDATE').AsDateTime;
L> ....
L>/pascal]
L>всё компилируется, но во время работы приложения, если попытаться включить данную процедуру
L>выскакивает сообщение о том, что поле 'DTDHT_D' не существует. В чём может быть замес?
L>Заранее благодарен за помощ.
Как минимум не ясно
1) при вызове какой функции происходит ошибка (как следствие непонятно какой запрос)
2) какие SQL-запросы формируют датасеты
3) какими SQL-запросами созданы таблицы фигурирующие в запросах.
Как следствие угадать зхачем дергается поле, которое не указано в коде будет трудно.
Поэтому
www.rsdn.ru/HowToAsk.htm
Также включить Debug DCUs и протрассировать к конкретной строчке вызывающей ошибку, это покажет причину ошибки.
Попробуйте напрямую выполнить азпросы в IBExpert
Попробуйте почитать документацию на
www.iBase.ru
Здравствуйте, Arioch, Вы писали:
A>Как минимум не ясно
A>1) при вызове какой функции происходит ошибка (как следствие непонятно какой запрос)
Ошибка происходит привызове функции FieldByName, её исходник
function TDataSet.FieldByName(const FieldName: string): TField;
begin
Result := FindField(FieldName);
if Result = nil then DatabaseErrorFmt(SFieldNotFound, [FieldName], Self);
end;
A>2) какие SQL-запросы формируют датасеты
SQL запрос формирующий датасет выглядит следующе
SELECT
D_ORG.NAME, W_PRINAKL.NNAKL,
W_PRINAKL.DTNAKL, W_PNAKLTOV.PRICEP,
W_PNAKLTOV.QUANT_FAKT, W_PNAKLTOV.VEST,
W_PNAKLTOV.NSHET_D, W_PNAKLTOV.DTSHET_D,
S_DOGTOV.NDS,
D_TOVAR.NAME as NMTOV
FROM S_GR2TOV
INNER JOIN D_TOVAR ON (S_GR2TOV.ID = D_TOVAR.ID_GR2TOV)
INNER JOIN S_DOGTOV ON (D_TOVAR.ID = S_DOGTOV.ID_D_TOVAR)
INNER JOIN W_PNAKLTOV ON (S_DOGTOV.ID = W_PNAKLTOV.ID_DTOV)
INNER JOIN W_PRINAKL ON (W_PNAKLTOV.ID_PRINAKL = W_PRINAKL.ID)
INNER JOIN D_ORG ON (W_PRINAKL.ID_ORG = D_ORG.ID)
INNER JOIN D_DOGOVOR ON (S_DOGTOV.ID_D_DOGOVOR = D_DOGOVOR.ID)
WHERE (((W_PNAKLTOV.DTSHET_D >= :DtN) and (W_PNAKLTOV.DTSHET_D <= :DtE)) or
((W_PNAKLTOV.DTSHET_D is null) and (W_PRINAKL.DTNAKL >= :DtN) and (W_PRINAKL.DTNAKL <= :DtE) ) ) and
(S_GR2TOV.ID = :IDGR2) and (W_PNAKLTOV.VEST <> 0 )
ORDER BY D_ORG.NAME, D_TOVAR.NAME, W_PRINAKL.DTNAKL ;
A>3) какими SQL-запросами созданы таблицы фигурирующие в запросах.
Какими запросами создана таблица не знаю так как пришел в организацию не давно и работаю с готовой БД, но если вы имели в виду соответствие типов данных в БД и в запросе то оно полное.
A>Также включить Debug DCUs и протрассировать к конкретной строчке вызывающей ошибку, это покажет причину ошибки.
Дебагер пишет, что поле не найдено и указывает на функию, приведённую выше
A>Попробуйте напрямую выполнить азпросы в IBExpert
Запросы в IBExpert выполняются как положенно
A>Попробуйте почитать документацию на www.iBase.ru
Всё читаю

, сначали читаю и ищу потом спрашиваю
Проблема решена, я просто забыл инициировать дата сеты
Извиняюсь перед всеми кто потратил время на решение этой задачи и спасибо за помощ.