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

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

Как вытащить данные из "экзотического" CHAR/PCHAR ?


Dimedrol ©   (2004-11-01 13:19:00) 

Коллеги, есть данные, которые по утверждению
создателей интерфейса к 1 закрытой DLL(SO) возвращаются в виде
array of strings
там в исходнике (интерфейса) есть кусок -

PMYSQL_ROW = ^MYSQL_ROW;
MYSQL_ROW = char;
{ return data as array of strings  }


Весьма странно (для меня ;-) )
Я подозреваю что это в результате никакой
не CHAR а PCHAR.

Когда я пытаюсь из основной программы обратиться к нему
как к PCHAR, исправив указанные кусок кода,

PMYSQL_ROW = ^MYSQL_ROW;
MYSQL_ROW = PCHAR;
{ return data as array of strings  }

или даже так -

MYSQL_ROW = pchar;
PMYSQL_ROW = MYSQL_ROW; //чтобы не нарушать внутреннюю структуру

то вроде бы что-то получается, но присутствует мусор,
и как будто - не все данные. В общем - лажа какая-то.

Помогите плиз, как в это случае поступить ?


Dimedrol   (2004-11-03 12:10:00) [1]

точно нет... :-(


Dimedrol   (2004-11-02 12:58:00) [2]

2 PVOzerski ©
У вас есть работающий код на FreePascal
для соединения с MySQL базой и\или выполнения простеньких запросов ?
Если да, то не могли бы вы мне его прислать ?


Dimedrol   (2004-11-02 12:57:00) [3]

2 PVOzerski ©
У вас есть работающий код на FreePascal
для соединения с MySQL базой и\или выполнения простеньких запросов ?
Если да, то не могли бы вы мне его прислать ?


PVOzerski   (2004-11-02 09:52:00) [4]

В исходниках FreePascal, в packages, есть юниты с интерфейсными объявлениями для MySQL. Хотя местами там кое-что устарело, по крайней мере описания типов у меня задействовались успешно и с MySQL 4.


KSergey   (2004-11-02 08:03:00) [5]

> 2KSergey ©
> ну а как же тогда нужно "трактовать" ? чтобы данные получить
> ?

А там сишных прототипов нет случаем? Если есть - приведите здесь.


Dimedrol   (2004-11-01 14:16:00) [6]

2 clickmaker

Из кода, приведенного в оригинальном примере -

   rowbuf := mysql_fetch_row(recbuf);
   while (rowbuf<>nil) do
   begin

   Writeln  ('(Id: ', rowbuf[0]);
   Writeln  (', Name: ', rowbuf[1]);
   Writeln(', Email : ', rowbuf[2],')');
   
   rowbuf := mysql_fetch_row(recbuf);
   end;


Компилер (FreePas) ругается на rowbuf[0] - говорит - низя так. :-(

а я попробовал так -


var
rowbuf : pchar;
recbuf : PMYSQL_RES;
...

   rowbuf := mysql_fetch_row(recbuf);
   
   Writeln  ('size = ',sizeof(recbuf));
   
   begin
   Writeln  ('OUT = ',string(rowbuf));
   end;


то есть убрал все циклы, чтобы в принципе добраться до данных
и вот что компилер+программа выводит:

[root@Titan mysql]# ./c
Free Pascal Compiler version 1.0.10 [2003/06/26] for i386
Copyright (c) 1993-2003 by Florian Klaempfl
Target OS: Linux for i386
Compiling qtest.pas
qtest.pas(14,5) Note: Local variable COUNT not used
qtest.pas(14,11) Note: Local variable NUM not used
qtest.pas(15,5) Note: Local variable CODE not used
qtest.pas(18,5) Note: Local variable QBUF not used
qtest.pas(27,1) Note: Local variable A not used
qtest.pas(28,1) Note: Local variable AA not used
Assembling qtest
Linking qtest
149 Lines compiled, 0.0 sec
Allocating Space...
Connecting to MySQL...Done.
Connection data:
Mysql_port      : 3306
Mysql_unix_port : /var/lib/mysql/mysql.sock
Host info       : Localhost via UNIX socket
Server info     : Uptime: 1136023  Threads: 1  Questions: 3211834  Slow queries: 0  Opens: 99  Flush tables: 1  Open tables: 64  Queries per second avg: 2.827
Client info     : 4.0.11a-gamma
Selecting Database esubbota...
Executing query : select author, id, header from articles where id=27538 limit 1...
Number of records returned  : 1
Number of fields per record : 3
size = 4
OUT = Ш”@и”@о”@љ@ Людмила ВЕВЕРЕ.
Freeing memory occupied by result set...
Closing connection with MySQL.
[root@Titan mysql]#


жирным я отметил, что прога выводит - это имя Автора.
а остальное никак не могу вынуть...

2 VMcL ©
мда...

2KSergey ©
ну а как же тогда нужно "трактовать" ? чтобы данные получить ?
мда...


KSergey   (2004-11-01 13:47:00) [7]

А если обращаться как сразу - не получатется? Откуда подозрения-то?
Здесь чувствуется сишная калька, так что не надо додумывать по поводу PChar.

Да и array of strings, подозреваю, надо трактовать вовсе не в смысле паскалевских string ;)


clickmaker   (2004-11-01 13:28:00) [8]


> Когда я пытаюсь из основной программы обратиться к нему
>

как пытаешься?


VMcL   (2004-11-01 13:28:00) [9]

>> Dimedrol ©  (01.11.04 13:19)

Хм. А с чего это вдруг libMySql.dll стала закрытой?


Наверх

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