это может показаться глупым, и я могу пропустить что-то важное, но вот оно.Размер поля запроса FireDac не обновляется при изменении sql
Я переношу старое программное обеспечение от BDE к Firedac, и я заметил некоторые странные поведения (XE6 VCL - Firedac).
Представьте себе:
У нас есть запрос, который имеет простой SQL (SQL1), этот запрос определяется во время разработки и имеет все поля, извлекаемые (3 поля - треск, дез и IMG). Во время выполнения я выполняю этот запрос и проверяю размер поля трески, отлично работает. Затем я меняю sql (SQL2) и продолжаю проверять размер нового размера трески, это также работает. Но если я снова изменил sql на SQL1 и проверил размер поля трески, он предполагает тот же размер второго размера поля запроса.
Я протестировал его в небольшом проекте, и это также происходит следующим образом.
(я поместил 2 кнопки и метку, чтобы проверить размер)
procedure TForm1.SQL1Click(Sender: TObject);
begin
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Text:='select grefcod as cod, grefdesc as des, grefimg as img from wtv';
FDQuery1.Open;
sLabelFX1.Caption:=IntToStr(FDQuery1.FindField('COD').Size);
end;
procedure TForm1.SQL2Click(Sender: TObject);
begin
FDQuery1.Close;
FDQuery1.SQL.Clear;
FDQuery1.SQL.Text:='select ATRBcod as cod, ATRBdes as des from wtv2 ';
FDQuery1.Open;
sLabelFX1.Caption:=IntToStr(FDQuery1.FindField('COD').Size);
end;
Во-первых я назвать SQL1Click, размер трески 20;
Второй вызов SQL2Click, размер трески 5;
Последнее, я снова вызываю SQL1Click и размер трески 5 -> Неверно.
Редактировать: Реальный размер SQL1-трески составляет 20 varchar, а реальный размер SQL2 - 5 varchar.
Странно, извините, если я не могу объяснить это лучше. В любом случае, если я удаляю извлеченные поля во время разработки, проблема не существует, и мне просто нужно изменить способ получения полей, но поскольку это гигантское программное обеспечение, это не то, что я хотел бы сделать.
Когда мы закончили мигрировать, мы получили много нарушений доступа, большинство полей были постоянными, и поскольку во время выполнения большого количества запросов обновляется/изменяется много запросов, мы заметили, что размер поля меняется на минимальный размер. В небольших проектах мы меняли вручную и удаляли постоянные поля. Но в более крупном программном обеспечении это не то, что мы хотели бы сделать. Как я уже сказал в другом ответе, установка опции «Обновить стойкость», похоже, разрешает эти проблемы. Во всяком случае, я ценю ваш вклад, спасибо. –