Вопрос № 19640: У меня вопрос вот в чем.
Как передавать аргументом в функцию указатель на текст из компонент типа Edit?
Неужели так и придется писать, как в приложении?
Там видно, что сначала объявляем string, указатель на строку, затем передаем текст из...Вопрос № 19665: Доброго времени суток.
Пояснение и дополнение к вопросу №19602(Поскольку по первому же ответу
понятно, что я не корректно задал вопрос)
Параметр запроса выбирается из списка ComboBox на RunTime, по этому и использую св-во Text.
Далее...Вопрос № 19666: Доброго времени суток.
Пояснение к вопросу №19603
Сразу скажу:
1. я неприкалываюсь.
2. по поводу DOWNTO я прекрасно осведомлен.
3. прошу обратить внимание while работает.
Запускаю цикл.
var fi:array[0..220]of real;
for...
Вопрос № 19640
У меня вопрос вот в чем.
Как передавать аргументом в функцию указатель на текст из компонент типа Edit?
Неужели так и придется писать, как в приложении?
Там видно, что сначала объявляем string, указатель на строку, затем передаем текст из Edit в объявленный стринг, затем получаем указатель на этот стринг, который и передаем в функцию.
Нельзя ли как нибудь попроще? Без объявления лишних поинтеров и строк сразу передавать строку как указатель?
Приложение:
Отправлен: 13.04.2005, 12:50
Вопрос задал: Большаков Сергей Владимирович (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: sir henry
Здравствуйте, Большаков Сергей Владимирович!
А Вы не пробовали сразу строку компонента типа Edit в PChar преобразовать? Чем Вам вообще тип PChar не нравиться?
--------------------
var
l1, l2: PChar;
Begin
l2:=PChar(Edit1.Text);
....
End;
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 13.04.2005, 14:33
Отвечает: ImDeath
Мое почтение, Большаков Сергей Владимирович.
Передавать ComboBox1.Text (и подобное) прямо как указатель нельзя, потому как свойство Text объекта ComboBox1 не является переменной, а является всего лишь ссылкой на функции которые умеют возвращать и помещать текст в нужную вам переменную. Так как мы не знаем, где находится переменная, мы и ссылаться на нее не можем. Кстати свойство Text работает через функцию GetText и процедуру SetText, которые сами не знают адреса требуемой переменной :).
В вашем случае, насколько я вижу, сократить можно только так, как написано в приложении.
Приложение:
Ответ отправил: ImDeath (статус: 1-ый класс)
Отправлен: 13.04.2005, 22:29 Оценка за ответ: 5
Вопрос № 19665
Доброго времени суток.
Пояснение и дополнение к вопросу №19602(Поскольку по первому же ответу
понятно, что я не корректно задал вопрос)
Параметр запроса выбирается из списка ComboBox на RunTime, по этому и использую св-во Text.
Далее,
ADOQuery.Parameters.ParamByName('pname').Value:=ComboBox1.Text;
Ну да ладно с этими закорючками, оказывается он правильно выбирает имя,
но почему-то запрос выдает всего 1 запись, хотя с этим именем их в таблице около 10.
Sql текст этого запроса такой
select * from data where name=:pName
Кстати в Win98 все работает правильно.
вопрос- что за чертовщина и как с ней бороться? Может к гадалке сходить ;)
Отправлен: 13.04.2005, 21:38
Вопрос задал: JStudent (статус: Посетитель)
Всего ответов отправлено: 1
Отвечает: sir henry
Здравствуйте, JStudent!
Со свойством Text все понятно, это я немного не въехал в вопрос - извиняюсь. :)
1. Попробуйте переписать запрос так:
SELECT * FROM data WHERE Trim(name)=:pName
2. Попробуйте обновить OLE провайдера
http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c
http://www.microsoft.com/downloads/details.aspx?FamilyID=2deddec4-350e-4cd0-a12a-d7f70a153156&DisplayLang=ru
К сожалению Вы не написали, какая у Вас БД. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 14.04.2005, 06:12
Вопрос № 19666
Доброго времени суток.
Пояснение к вопросу №19603
Сразу скажу:
1. я неприкалываюсь.
2. по поводу DOWNTO я прекрасно осведомлен.
3. прошу обратить внимание while работает.
Запускаю цикл.
var fi:array[0..220]of real;
for i:=0 to 220 do
begin
fi[i] := 300;
end;
Я немного ошибся, i на первом же шаге принимает значение 221 и дальше пошла вниз по убывающей.
Далее, этот цикл не вложен в другой, в данном модуле у меня I используется несколько раз
для запуска циклов. В нескольких циклах та же проблема, в других нормально работает.
Думал, что I где-то присваевается другое значение, поэтому менял i на на новую переменную,
в тех же циклах та же проблема.
В то же время, меняю цикл for на while:
i:=0;
while i<101 do
begin
fi[i] := 300;
i:=i+1;
end;
Работает как надо.
Внимание, вопрос! Из-за чего такое явление имеет место быть?
Текст всей программы послать не могу, так как у меня там много собственных процедур и функций,
с ними легче запутаться чем разобраться.
Отправлен: 13.04.2005, 21:42
Вопрос задал: JStudent (статус: Посетитель)
Всего ответов отправлено: 4
Отвечает: John Freeman
Здравствуйте, JStudent!
Слушай , этот прикол ещё в Turbo Pascal был - выключи оптимизацию в свойствах проекта.
Ответ отправил: John Freeman (статус: Профессионал)
Отправлен: 13.04.2005, 22:51
Отвечает: wils0n
Здравствуйте, JStudent!
Читайте ответы Pushkin'a и ImDeath'a. Там всё сказано. Для проверки запустите что-нибудь вроде
for i:=0 to 220 do writeln(i);
или
for i:=0 to 220 do a[i]:=i;
Всё будет работать нормально.
Ответ отправил: wils0n (статус: 1-ый класс)
Отправлен: 13.04.2005, 23:11
Отвечает: sir henry
Здравствуйте, JStudent!
Если честно, то ситуация непонятная. Давайте начинать поиски с хвоста, за который можно ухватить. :)
Первый вопрос - откуда берется значение i:=221?
------------------
for i:=0 to 220 do
begin
WriteLn(i); {Здесь должно быть 0,1,2,3, и так далее, эксперименты это подтверждают :) !!!}
fi[i]:=300;
End;
------------------
Не путаются ли у Вас глобальная переменная i с локальной в какой-либо процедуре или функции?
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 14.04.2005, 05:52
Отвечает: Pushkin
Согласен, в твоем цикле FOR переменная i ИСПОЛЬЗУЕТСЯ, но с одной оговоркой, - она в левой части оператора :=. Попробуй поставить ее в правой части и все пойдет как надо. Например fi[i] := i+1;
Компилятор Delphi - довольно таки умная штука. Он смотрит, если от порядка изменения переменной цикла в выполнении программы ничего не изменится, то он делает код более быстрым. Сравни
1.
mov i,0
for1: inc i
cmp i,220
jnz for1
2.
mov i,220
for1: dec i
or i,i
jnz for1
Второй вариант занимает меньше места на 1-2 байта и выполняется быстрее на n*220 тактов, где n - зависит от типа переменной n. Чем больше размерность i, тем больше n.
Если что-то еще не понятно напиши весь цикл for (на эл. почту)
Ответ отправил: Pushkin (статус: 1-ый класс)
Отправлен: 14.04.2005, 13:05