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

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

Field Not Found


Страницы:   1 2 3

Krants ©   (2007-08-28 17:00:00) 

Помогите разобраться с непонятной ошибкой, имеется поключение к базе(access) через пал-ру ADO, два связанных ADOQuery через TDataSource:
DS_Look.DataSet:=QueryLook;
QueryEdit.DataSource:=DS_Look;

при первичном запуске кода:  
QueryLook.Close;
QueryEdit.Close;

QueryLook.SQL.Clear;
QueryLook.SQL.Add('Select id, '+field);
QueryLook.SQL.Add('From table');
QueryLook.Open;

QueryEdit.SQL.Clear;
QueryEdit.SQL.Add('select id, MyField from table Where id>=:id');
QueryEdit.SQL.Add('AND '+field+'=:'+field);
QueryEdit.Open;

при заранее заданном field:='field1';
выполняется все великолепно!
но при вторичном запуске и измененным значением field:='field2';
происходит ошибка типа: "QueryLook: field 'field1' not found"

подскажите плз в чем может заключаться ошибка и как ее можно устранить?


Reindeer Moss Eater   (2007-08-29 12:22:00) [21]

А вообще чувак,
не морочь людям голову!

Krants ©   (29.08.07 11:53) [22]

> clickmaker ©   (29.08.07 11:51) [21]
> QueryLook или DS_Look кем-нибудь используется? (не обязательно
> в этой форме)
нет!

единственным, пока найденным, логичным решением является:
QueryDupl.Destroy;


В твоем приведенном коде нигде нету QueryDupl


Reindeer Moss Eater   (2007-08-29 12:19:00) [22]

Ну если связь используется и прога ругается на field1, то зачем делать вот так:

QueryLook.SQL.Add('Select id, '+field);

тем более что QueryEdit.DataSource:=DS_Look;


Krants   (2007-08-29 12:14:00) [23]


> Reindeer Moss Eater ©   (29.08.07 12:10) [26]

а как ты думаешь, откуда берутся параметры?
QueryEdit.SQL.Add('select id, Field3 from Table1 Where id>= :id');
QueryEdit.SQL.Add('AND '+field+'= :'+field);

и с чего ты взял что связь не используется?


Reindeer Moss Eater   (2007-08-29 12:10:00) [24]

зачем указаывать датасорс датасету, если не указаны ключевые поля и связь н еиспользуется?


Krants   (2007-08-29 12:08:00) [25]


> Reindeer Moss Eater ©   (29.08.07 12:05) [24]
для зеленых человечков) ну попросил же, ознакомся с вопросом сначала!


Reindeer Moss Eater   (2007-08-29 12:05:00) [26]

А вот это зачем, если связь не используется?

QueryEdit.DataSource:=DS_Look;


clickmaker   (2007-08-29 11:59:00) [27]

ну хорошо. Находим SFieldNotFound = 'Field ''%s'' not found'; в DBConsts.pas
Ищем дальше:
например
function TDataSet.FieldByName(const FieldName: string): TField;
begin
 Result := FindField(FieldName);
 if Result = nil then DatabaseErrorFmt(SFieldNotFound, [FieldName], Self);
end;

еще

procedure TDBLookupControl.UpdateListFields;
var
 DataSet: TDataSet;
 ResultField: TField;
begin
 FListActive := False;
 FKeyField := nil;
 FListField := nil;
 FListFields.Clear;
 if FListLink.Active and (FKeyFieldName <> '') then
 begin
   CheckNotCircular;
   DataSet := FListLink.DataSet;
   FKeyField := GetFieldProperty(DataSet, Self, FKeyFieldName);
   try
     DataSet.GetFieldList(FListFields, FListFieldName);
   except
     DatabaseErrorFmt(SFieldNotFound, [Self.Name, FListFieldName]);
   end;

и так далее по сырцам VCL.
Если ничего из найденного в проекте точно не юзается, тогда с чистой душой списываем все на зеленых человечков и идем пить пиво...


Krants   (2007-08-29 11:53:00) [28]


> clickmaker ©   (29.08.07 11:51) [21]
> QueryLook или DS_Look кем-нибудь используется? (не обязательно
> в этой форме)
нет!


clickmaker   (2007-08-29 11:51:00) [29]

QueryLook или DS_Look кем-нибудь используется? (не обязательно в этой форме)


Krants   (2007-08-29 11:44:00) [30]

держите код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DB, ADODB, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   DS_Look: TDataSource;
   ADOConnection1: TADOConnection;
   QueryEdit: TADOQuery;
   QueryLook: TADOQuery;
   procedure doit(field:string);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.doit(field: string);
begin
DS_Look.DataSet:=QueryLook;
QueryEdit.DataSource:=DS_Look;

QueryLook.Close;
QueryEdit.Close;

QueryLook.SQL.Clear;
QueryLook.SQL.Add('Select id, '+field);
QueryLook.SQL.Add('From Table1');
QueryLook.Open;

QueryEdit.SQL.Clear;
QueryEdit.SQL.Add('select id, Field3 from Table1 Where id>=:id');
QueryEdit.SQL.Add('AND '+field+'=:'+field);
QueryEdit.Open;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
doit(edit1.Text);
end;

end.


DFM:
object Form1: TForm1
 Left = 192
 Top = 107
 Width = 403
 Height = 275
 Caption = 'Form1'
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 176
   Top = 160
   Width = 75
   Height = 25
   Caption = 'Button1'
   TabOrder = 0
   OnClick = Button1Click
 end
 object Edit1: TEdit
   Left = 128
   Top = 136
   Width = 121
   Height = 21
   TabOrder = 1
   Text = 'field1'
 end
 object DS_Look: TDataSource
   Left = 184
   Top = 56
 end
 object ADOConnection1: TADOConnection
   Connected = True
   ConnectionString =
     'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=prim.' +
     'mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System' +
     ' database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Passw' +
     'ord="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1' +
     ';Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Trans' +
     'actions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create Sy' +
     'stem Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:D' +
     'on''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Repl' +
     'ica Repair=False;Jet OLEDB:SFP=False'
   LoginPrompt = False
   Mode = cmShareDenyNone
   Provider = 'Microsoft.Jet.OLEDB.4.0'
   Left = 120
   Top = 56
 end
 object QueryEdit: TADOQuery
   Connection = ADOConnection1
   CursorType = ctStatic
   Parameters = <>
   Left = 240
   Top = 56
 end
 object QueryLook: TADOQuery
   Connection = ADOConnection1
   Parameters = <>
   Left = 280
   Top = 56
 end
end


база: prim.mdb|Table1|id,field1,field2,field3|

после компиляции сликните Button1, измените в эдите field1 на field2 и еще раз кликните...


> Reindeer Moss Eater
особенная просьба сперва разбираться в вопросах, а потом отвечать...


Reindeer Moss Eater   (2007-08-29 11:23:00) [31]

Нафик шаги. все равно не сможет.

Жми Ф9, получай текст ошибки.
Записывай на бумажку имя поля.
Открывай дфм как текст, и ищи упоминание этого поля в свойствах.
Все!


sniknik   (2007-08-29 11:14:00) [32]

напиши последовательно шаги, что делаешь,  от пустого проекта, до того минимума в котором ошибка. и "чудо" будет перед глазами.


sniknik   (2007-08-29 11:12:00) [33]

если никаких операций не делалось то и связи нет. а написано что есть.


Reindeer Moss Eater   (2007-08-29 11:06:00) [34]

Ты нас-то не уговаривай и не убеждай, что у тебя все в порядке.
Ты себя уговаривай.


Krants   (2007-08-29 11:05:00) [35]


> Reindeer Moss Eater ©   (29.08.07 10:58) [12]
см. [9]

> и никаких других операций ни в дезигнени в рантайме
и тут неважно будь то изначально field1, field100 или field999...


Reindeer Moss Eater   (2007-08-29 11:03:00) [36]

Ты сам связь создал и спрашиваешь как её обнулить?


Krants   (2007-08-29 11:02:00) [37]


> sniknik ©   (29.08.07 10:53) [10]
в том то и дело что провисает где-то связь, а вот как обнулить?


Reindeer Moss Eater   (2007-08-29 10:58:00) [38]

В общем закрой все. Сосчитай до десяти.
Открой фар и ищи в папке проекта файлы *.pas *.dfm содержащие слово целиком "field1"

Тогда и отыщешь своих зеленых человечков.


Reindeer Moss Eater   (2007-08-29 10:56:00) [39]

и никаких других операций ни в дезигне ни в рантайме с его обьектами не осуществляется!

Я и говорю, что злые зеленые человечки атакуют твою программу.


sniknik   (2007-08-29 10:53:00) [40]

ну а как насчёт заранее заданных field? связь то на открытых датасетах делалась, названия полей в связь то прописались. и неважно что сам ты эту операцию не делал... ты делал то что спровоцировало это.


Страницы:   1 2 3

Наверх

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