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

Вниз

Самопроизвольное? изменение переданных параметров   Найти похожие ветки 

 
perov   (2002-07-15 08:45) [0]

Имеется такой участок кода

procedure PlChangeSQL(var AQuery: TOraQuery; ANewSQL: string; const par: array of const);
var
i: Integer;
begin
with AQuery do begin
if Prepared then UnPrepare;
if Active then Close;
SQL.Clear;
SQL.Add(ANewSQL);


до строки SQL.Clear значение par[1].vAnsiString, то что действительно передавалось.
После выполнения SQL.Clear меняется на случайное.
Значение par[0].vAnsiString не меняется.
Что здесь неправильного?


 
yozhik   (2002-07-15 10:24) [1]

возможно в строке ANewSQL нет второго параметра, поэтому он и меняется на случайное значение


 
Anatoly Podgoretsky   (2002-07-15 10:29) [2]

Это намек, что бы ты привел содержимое ANewSQL и par


 
perov   (2002-07-15 10:29) [3]

par содержит пары элементов - имя, значение
и на данном участке кода par и sql никаким образом не связаны да и не могут иметь общих точек соприкосновения...
есть в par[1] будет Integer то все нормально.
тут дело в чем-то другом....


 
jonik pegas   (2002-07-15 10:30) [4]

А ты чего ожидал после Clear-a?. Он сбрасывает свои параметры после изменения SQl запроса. Присвой значения параметра после.


 
Desdechado   (2002-07-15 10:38) [5]

естественно. после Clear очищается список параметров. он же потом генерируется заново при появлении SQL.


 
perov   (2002-07-15 10:43) [6]

Clear очищает текст запроса, как он может повлиять на другие переменные?????
par - это массив параметров, а не свойство params
и как свойство SQL может что-то знать об окружающем его мире за пределами объекта, который это свойство содержит?

par[1].vansistring содержит указатель на строку, которая формируется динамически , причем anewsql ничто об этом не знает, но создается впечатление, что par[1].vansistring ссылается на область памяти, занятой AQuery.SQL

вызов происходит так
PlChangeSQL(qry999, sql, par);
par формируется следующим образом:
...
AddElementOpenArray(["nam", edtFAM.Text + "%"], par);
...
где
procedure AddElementOpenArray(args: array of const; var Res: TArrayofConst);
var
i, j: Integer;
begin
i := High(res) + 1;
SetLength(Res, High(Res)+ 1 + High(Args) + 1);
for j := 0 to High(Args) do begin
Res[i] := Args[j];
Inc(i);
end;
end;


 
sniknik   (2002-07-15 13:06) [7]

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

посмотри как установлено свойство ParamCheck, если true то при любом изменении текста запроса будут переопределятся параметры.


 
perov   (2002-07-15 13:22) [8]

Параметры запроса хранятся в свойстве param.
При вызове метода Clear "меняется" содержимое par[1].vAnsiString.
par описан как array of const и к свойтсву params типа TParams не имеет никакого отношения.


 
Vorobyev S   (2002-07-15 15:17) [9]

Возможно твоя проблема связана с динамическим выделением памяти... Трудно сказать не видя кода...
Проверь все указатели и как выделяется память для объектов (в том числе и массивов) с помощью New() или Object.Create() или же Malloc, SetLength() и т.п.
У меня была похожая проблема, никак не мог понять как изменение данных в одних объектах влияет на другие переменные..
Оказалось, что для переменных (использовались указатели) неправильно выделялась память, в итоге области памяти перекрывались..
Думаю все, что написал, понятно :-)


 
perov   (2002-07-16 05:28) [10]

to Vorobyev S

Правильно :)

to all
array of const всю информацию (кроме целых чисел и символа) хранит в виде указателей. и между моментов формирования array of const (он формируется динамически) и моментом его использования, объекты, на которые он ссылается уже могут не существовать (что и было в моем случае), поэтому вызов SQL.Clear мог перераспределить память, колторуу ранее занимали объекты, на которые ссылается array of const



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

Форум: "Базы";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
4-13860
ghost_by
2002-05-16 21:43
2002.08.05
ExitWindowsEx - ?


3-13551
Itspets
2002-07-14 01:11
2002.08.05
Сбор данных из множества баз MS Access


1-13692
don_dampster
2002-07-24 06:49
2002.08.05
Без формы!


14-13793
Феликс
2002-07-10 20:24
2002.08.05
Слушайте! Правда, что ли, что сборная Россия проиграла Японцам?


1-13681
иван
2002-07-23 19:17
2002.08.05
Работа с файлом





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский