![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Глюк FieldByName() [D7, dBase, FoxPro]
ancot © (2007-01-19 00:08:00)Всем доброй ночи. У меня такая беда:
На главной форме приложения есть TTable который
открывается в OnCreate формы.
Еще есть функция:
function GetConst(const AName: String): String;
begin
Result := NalogDM.OrgTbl.FieldByName( AName).AsString;
end;
смысл надеюсь понятен.
При вызове функции
GetConst('NM');
возникает исключение EDatabaseError OrgTbl: Field"NM" not found., а если переписать функцию:
function GetConst(const AName: String): String;
begin
Result := NalogDM.OrgTbl.FieldByName( 'NM').AsString;
end;
то все отрабатывает, подскажите плз куда рыть
Германн (2007-01-19 01:39:00) [1]Прошу прощения за мой форумовский!
"сисиема" -> "система" :)
Германн (2007-01-19 01:35:00) [2]
> ancot (19.01.07 01:25) [9]
>
> Всем спасибо, всетаки надо задуматся о зрении, в функцию
> приходит строка с одинарными кавычками побокам,
>
> 'NM' <> ''NM''
>
Это действительно "системный сверхглюк"! Только вот виновата оказалась "другая сисиема" :)
P.S. Кстати "задумат ься о зрении никогда не рано и часто полезно.
ancot (2007-01-19 01:25:00) [3]Всем спасибо, всетаки надо задуматся о зрении, в функцию приходит строка с одинарными кавычками побокам,
'NM' <> ''NM''
sniknik (2007-01-19 01:13:00) [4]> //вот тута 'NM' <> 'NM'
if 'NM' <> 'NМ' then ShowMessage('а ведь действительно не равно! ;)');
скопируй отсюда и проверь.
Германн (2007-01-19 01:03:00) [5]
> ancot (19.01.07 00:57) [5]
>
>
> > либо это системный сверхглюк...
>
> наверно, потому что не работает даже это:
>
>
Не верю. Продолжай поиски.
ancot (2007-01-19 01:00:00) [6]правда по кнопке "код" не попал...
ancot (2007-01-19 00:57:00) [7]
> либо это системный сверхглюк...
наверно, потому что не работает даже это:
> function GetConst(const AName: String): String;
> var i: Integer;
> s1, s2: String;
> begin
> s1 := AName;
> begin
> for i := 0 to NalogDM.OrgTbl.Fields.Count - 1 do
> begin
> s2 := NalogDM.OrgTbl.Fields[i].FieldName;
>
> //вот тута 'NM' <> 'NM'
> if s1 = s2 then Result := NalogDM.OrgTbl.Fields[i].
> AsString;
> end;
> end;
> end;
да и на зрение не жаловался...
Palladin (2007-01-19 00:36:00) [8]ну это что то из области фантастики... строки не равны и мало ли что ты видишь глазами в отладчике... либо это системный сверхглюк... советую по индексу поля получить его имя и побайтово вывести две строки в лог... сразу все будет видно...
ancot (2007-01-19 00:28:00) [9]поспешил...
вот что еще нарыл
function TFields.FindField(const FieldName: string): TField;
var
I: Integer;
begin
for I := 0 to FList.Count - 1 do
begin
Result := FList.Items[I];
//Вот в этом месте AnsiCompareText не возвращает 0 даже
//если оба параметра равны (по крайней мере в отладчике)
if AnsiCompareText(Result.FFieldName, FieldName) = 0 then Exit;
end;
Result := nil;
end;
Palladin (2007-01-19 00:13:00) [10]а выводы о глючности метода FieldByName весьма и весьма поспешны...
Palladin (2007-01-19 00:12:00) [11]либо у тебя в вызове GetConst строка не 'NM', либо обращение идет к какой то другой функции GetConst...