Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема вытаскиваниея информации [D6, MySQL]


Страницы:   1 2 3

Separator ©   (2002-10-21 11:32:00) 

Я использую zeos компоненты.
У меня в базе есть поля под название Par1..ParX типа char(18). В них хранятся числовые данные, т.е. просто набор чисел. Как мне их вытащить???
Вот кусок кода:

var
Ar: array [1..18] of byte;
begin
ZMySqlQuery1.Sql.Clear;
ZMySqlQuery1.Sql("select Par1 from ArcRecv1 where NZap=1"); //NZap - номер записи
ZMySqlQuery1.Open;
Ar:= //Как вытащить???
ZMySqlQuery1.Close
end;


ЮЮ   (2002-10-23 09:10:00) [21]

а пробовал, что говорит passm © (21.10.02 12:41) ?


Separator   (2002-10-23 08:49:00) [22]

Другими прогами все нормально вытаскивается, все уже на 10 раз проверено, даже на c++ под Linux писали тестовую прогу, все везде есть. Да и я сам уже на дельфях проверял только другим методом, с помощью другой библиотеки.


ЮЮ   (2002-10-23 08:28:00) [23]

Это понятно. А почему ты думаешь, что в БД есть ещё что-то ???


Separator   (2002-10-23 08:13:00) [24]

Во первых:
move(P^, Par^, 18);
изменяются только первые две переменные, остальные нули.
Во вторых:
for i:= 0 to 255 do
Memo1.Lines.Add("P["+IntToStr(i)+"] = "+IntToStr(Ord(P[i])));
Кроме первых двух, все остальные нули


ЮЮ   (2002-10-23 03:46:00) [25]

>Почемуто забивает только 2 байта (0 и 1) остальное 0
А откуда уверенность, что заполнено более 2 байтов из 18 ?


Separator   (2002-10-22 14:27:00) [26]

проблема так и не решена. У кого еще есть какие-либо версии?


Separator   (2002-10-22 07:18:00) [27]


> GetCurrentRecord(P);

Почемуто забивает только 2 байта (0 и 1) остальное 0


Separator   (2002-10-22 07:09:00) [28]

не получается.

var
Par: PPar;
P: pChar;
Ar: array [1..18] of byte;
i: integer;
begin
ZMySqlDatabase1.Connect;
ZMySqlQuery1.Open;
P:= StrAlloc(255);
GetMem(Par, 18);
ZMySqlQuery1.GetCurrentRecord(P);

Memo1.Lines.Clear;

for i:= 0 to 255 do
Memo1.Lines.Add("P["+IntToStr(i)+"] = "+IntToStr(Ord(P[i])));

move(P^, Par^, 18);

Memo1.Lines.Add("flgTS: "+IntToStr(Par^.flgTS));
Memo1.Lines.Add("Ckv: "+FloatToStr(Par^.Ckv));
Memo1.Lines.Add("Vmin: "+FloatToStr(Par^.Vmin));
Memo1.Lines.Add("Vkv: "+IntToStr(Par^.Vkv));
Memo1.Lines.Add("TimeRecv: "+IntToStr(Par^.TimeRecv));
Memo1.Lines.Add("TimeUpd: "+IntToStr(Par^.TimeUpd));

FreeMem(Par, 18);

ZMySqlQuery1.Close;
ZMySqlDatabase1.Disconnect;
end;


Separator   (2002-10-22 06:38:00) [29]

Length(St) = 0
Сейчас попробую


ЮЮ   (2002-10-22 04:17:00) [30]

St: ZMySqlQuery1.Fields.Fields[0].asString[1];
move(St, par, 18);
то получается, но с некоректными данными

Естественно, т.к. в St считан только первый символ из БД, а остальное - мусор. Тогда уж
St:= ZMySqlQuery1.Fields.Fields[0].asString;
Кстати, какой длины полуится при этом St, принимая во внимание наличие #0 ?
Если обрезает, то попробуй метод GetCurrentRecord


Separator   (2002-10-21 13:58:00) [31]

Не получается. если делать:
St: ZMySqlQuery1.Fields.Fields[0].asString[1];
move(St, par, 18);
то получается, но с некоректными данными. А если так как ты пишешь, то AccessViolitate


ЮЮ   (2002-10-21 13:50:00) [32]

VarType выдает 256.
это varString.
Тогда возвращаемся к
move(ZMySqlQuery1.Fields.Fields[0].asString[1], Par, 18);


Separator   (2002-10-21 13:32:00) [33]

Запрос выполняется.
VarType выдает 256. Я никогда не работал с вариантами и не заню как.


ЮЮ   (2002-10-21 13:25:00) [34]

Value типа variant.
A какой VarType ?


ЮЮ   (2002-10-21 13:22:00) [35]

"не корректные данные или AccessViolitate" - это, похоже, от ADO provider-а. Запрос-то сам выполняется?


Separator   (2002-10-21 13:18:00) [36]

Неа не корректные данные или AccessViolitate
В Ar тоже не удалось.
Прикол в том, что Value типа variant, а он тока 16 байт.


ЮЮ   (2002-10-21 13:05:00) [37]

А в Ar загнать удалось ?
Тогда может сразу
move(ZMySqlQuery1.Fields.Fields[0].Value, Par, 18);


Separator   (2002-10-21 12:57:00) [38]

#0 в самом начале и дальше тоже появляется. Вообще в ячейках хранятся структуры такого типа:

type
PPar= ^TPar;
TPar= packed record
flgTS: byte;
Ckv: single;
Vmin: single;
Vkv: byte;
TimeRecv: cardinal;
TimeUpd: cardinal
end;

Я в дальнейшем буду делать так:
move(Ar, Par, 18);
Кстати база так и заполнялась, тока в обратном порядке и на C++


ЮЮ   (2002-10-21 12:55:00) [39]

Хотя, можно и с Ord:

str := ZMySqlQuery1.Fields.Fields[0].AsString;
for i:= 0 to Length(str) - 1 do
Ar[i] := Ord(str[i+1]) - Ord("0");


ЮЮ   (2002-10-21 12:47:00) [40]

C Ord я, конечно, перегнул палку :-)

str := ZMySqlQuery1.Fields.Fields[0].AsString;
for i:= 0 to Length(str) - 1 do
Ar[i] := StrToInt( Copy(str,i,1) );


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо