Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Вниз

Field Not Found   Найти похожие ветки 

 
Krants ©   (2007-08-28 17:00) [0]

Помогите разобраться с непонятной ошибкой, имеется поключение к базе(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"

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


 
clickmaker ©   (2007-08-28 17:10) [1]

значит, кто-то просит именно field1


 
sniknik ©   (2007-08-28 17:11) [2]

в режиме разработки коннект закрой перед компиляцией/запуском, тогда и
> при первичном запуске кода:  
> QueryLook.Close;
> QueryEdit.Close;
не надо будет делать, и заранее заданные field мешать не будут.


 
Krants ©   (2007-08-28 17:14) [3]


> clickmaker ©   (28.08.07 17:10) [1]

больше эти компоненты нисчем не связаны

> sniknik ©   (28.08.07 17:11) [2]

QueryLook.Close - это для наглядности кода, а так все закрывается и откр. в р-тайме.


 
Reindeer Moss Eater ©   (2007-08-28 17:16) [4]

ShowMessage(QueryEdit.SQL.Text) как всегда поставит все точки над i


 
Reindeer Moss Eater ©   (2007-08-28 17:18) [5]

Точнее ShowMessage(QueryLook.SQL.Text)


 
Krants ©   (2007-08-29 10:30) [6]


> Reindeer Moss Eater ©   (28.08.07 17:18) [5]
по запросу и так все видно, см. [0]

единственным, пока найденным, логичным решением является:
QueryDupl.Destroy;
QueryDupl:=TADOQuery.Create(self);
QueryDupl.Connection:=ADOConnection;

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


 
Reindeer Moss Eater ©   (2007-08-29 10:34) [7]

по запросу и так все видно, см. [0]

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


 
Reindeer Moss Eater ©   (2007-08-29 10:36) [8]

Либо у тебя ранее был создан экземпляр поля field1.
Смотри редактор полей своего QueryLook


 
Krants ©   (2007-08-29 10:42) [9]


> Reindeer Moss Eater ©   (29.08.07 10:36) [8]
выше приведенный код, это минимальный код при котором возн. ошибка, и никаких других операций ни в дезигне ни в рантайме с его обьектами не осуществляется!


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

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


 
Reindeer Moss Eater ©   (2007-08-29 10:56) [11]

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

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


 
Reindeer Moss Eater ©   (2007-08-29 10:58) [12]

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

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


 
Krants ©   (2007-08-29 11:02) [13]


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


 
Reindeer Moss Eater ©   (2007-08-29 11:03) [14]

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


 
Krants ©   (2007-08-29 11:05) [15]


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

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


 
Reindeer Moss Eater ©   (2007-08-29 11:06) [16]

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


 
sniknik ©   (2007-08-29 11:12) [17]

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


 
sniknik ©   (2007-08-29 11:14) [18]

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


 
Reindeer Moss Eater ©   (2007-08-29 11:23) [19]

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

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


 
Krants ©   (2007-08-29 11:44) [20]

держите код:
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
особенная просьба сперва разбираться в вопросах, а потом отвечать...


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

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


 
Krants ©   (2007-08-29 11:53) [22]


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


 
clickmaker ©   (2007-08-29 11:59) [23]

ну хорошо. Находим 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.
Если ничего из найденного в проекте точно не юзается, тогда с чистой душой списываем все на зеленых человечков и идем пить пиво...


 
Reindeer Moss Eater ©   (2007-08-29 12:05) [24]

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

QueryEdit.DataSource:=DS_Look;


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


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


 
Reindeer Moss Eater ©   (2007-08-29 12:10) [26]

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


 
Krants ©   (2007-08-29 12:14) [27]


> 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:19) [28]

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

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

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


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

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

Krants ©   (29.08.07 11:53) [22]

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

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


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


 
Krants ©   (2007-08-29 12:22) [30]


> Reindeer Moss Eater ©   (29.08.07 12:19) [28]

ты чего накурился???
возьми код [20], скомпиль, и подскажи как устранить ошибку... а потом спрашивай что для чего и зачем...


 
Reindeer Moss Eater ©   (2007-08-29 12:24) [31]

Иди в баню чувак.

Зачем ты кликмастеру сказал, что на эти запросы никто и нигде не ссылается? Если убийство QueryDupl якобы решает проблему?


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


> Reindeer Moss Eater ©   (29.08.07 12:22) [29]
не обязательно в этой форме
вопрос логичный, ответ конкретный судя по коду в вопросе!
QueryDupl, -это из проги, из примера: QueryEdit


 
Reindeer Moss Eater ©   (2007-08-29 12:27) [33]

QueryDupl, -это из проги, из примера: QueryEdit

Еще раз для тех кто в танке: Не морочь людям голову!

Здесь люди првыкли искать ошибки в реальном коде, а не в вымышленном.


 
Krants ©   (2007-08-29 12:30) [34]


> clickmaker ©   (29.08.07 11:59) [23]

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


 
Krants ©   (2007-08-29 12:33) [35]


> Reindeer Moss Eater ©   (29.08.07 12:27) [33]
хорошо, не буду, толко не флуди больше пожалуйста!
хочешь ответить по вопросу ответь, сперва прочтя его, что-то неясно спроси, сперва еще раз вникнув в вопрос и в то что хочешь спросить.


 
sniknik ©   (2007-08-29 12:34) [36]

Krants ©   (29.08.07 11:44) [20]
добавь
...
QueryEdit.Open;
Label1.Caption:= TADODataSet(QueryEdit).MasterFields;
end;

вот тебе и предопределённое поле (в [0] оно вроде в десигне устанавливалось, в 20 в коде, непринципиально),

вообще это больше относится к вопросу о правильности выбираемых компонент...


 
Reindeer Moss Eater ©   (2007-08-29 12:35) [37]

Зеленые человечки - это ADO

Description

Set DataSource to automatically fill parameters in a query with fields values from another dataset. Parameters that have the same name as fields in the other dataset are filled with the field values. Parameters with names that are not the same as fields in the other dataset do not automatically get values, and must be programmatically set. For example, if the SQL property of the TADOQuery contains the SQL statement below and the dataset referenced through DataSource has a CustNo field, the value from the current record in that other dataset is used in the CustNo parameter:


 
Anatoly Podgoretsky ©   (2007-08-29 12:39) [38]

> Krants  (29.08.2007 12:14:27)  [27]

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

Из твоего dfm


 
sniknik ©   (2007-08-29 12:51) [39]

Reindeer Moss Eater ©   (29.08.07 12:35) [37]
> Зеленые человечки - это ADO
не ADO а борланд, это он сделать 3 заведомо убогих компонента "под BDE", спрятав/убрав "лишнее".

в нормальных все видно.

Anatoly Podgoretsky ©   (29.08.07 12:39) [38]
> Из твоего dfm
необоснованная придирка, это же код пример "необходимый минимум" воспроизведения ошибки, мы сами хотели чтоб он такой предоставил.


 
Reindeer Moss Eater ©   (2007-08-29 12:53) [40]

Ну я и имел ввиду реализацию адо



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

Форум: "Начинающим";
Текущий архив: 2007.09.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.038 c
2-1188366377
ДуДу
2007-08-29 09:46
2007.09.23
Скрытие процесса.


15-1187861902
db2admin
2007-08-23 13:38
2007.09.23
Привет


1-1184231813
Phoenix
2007-07-12 13:16
2007.09.23
rtf файлы и колонтитулы.


15-1187947154
sample01
2007-08-24 13:19
2007.09.23
Explorer


10-1136962897
alex_s
2006-01-11 10:01
2007.09.23
SafeArray





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский