Форум: "Начинающим";
Текущий архив: 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.043 c