How to import user-defined Data from Database or TCP/IP server

Hi,
I’m very new in root programming and i want use root for visualization of forex market data.
I have a big Database with a self-made structure, which holds the forex data for example EUR/USD.

Is it possible to read in data from a odbc database which have a user-defined structure ??

Can i read in data into root from a TCP/IP server ??

1 Like

Hi,

There are ODBC-support classes in ROOT

https://root.cern/doc/master/classTODBCServer.html#a4987eb3b668c79b453df5c847cd22f68

You can request any kind of information, using standard SQL syntax.
Here example macro how SQL classes (including ODBC) can be used:

There is also TSocket class, while allows to open server and client sockets.

https://root.cern/doc/master/classTSocket.html

Examplse you will find in tutorials/net like hserv.C or hclient.C

Regards,
Sergey

Hi Linev,

cool, now i can connect to my Server. But i have written my server with windows sockets and i transmit a data structure.

I have imported the structure in root and noticed that the structure alignment is different from the alignment in my server.

Visual Studio 2013 Server:

typedef struct { … }s_TCP_IP_SEND_BUFF_t;

iResult = send(ClientSocket[ui32_Counter], (char *)&s_TCP_IP_SEND_BUFF, sizeof(s_TCP_IP_SEND_BUFF), 0);

Root 5.34/36 Client

typedef struct { … }s_TCP_IP_SEND_BUFF_t;

int ret = sock->RecvRaw((void *)(&s_TCP_IP_SEND_RECV), sizeof(s_TCP_IP_SEND_RECV_t));

Simplest solution for alignment - use data types which are 8-bytes aligned. Like int64_t or double, but not bool.

This type in one system is 16 bytes, and in the other it is 12 byte.
>typedef struct s_test_t
{
uint8 ui8_v1;
uint64 ui64_v2;
}s_test_t;

I started to add padding bytes like
>typedef struct s_test_t
{
uint8 ui8_v1;
uint32 ui32_PADDING_0;
uint64 ui64_v2;
}s_test_t;

to make it the same size. The reason is that i must adapt the root types to the server types. It’s not possible to
adapt the server in this case.

If you cannot change server code, you can use #pragma pack as described here. Code will look like:

#pragma pack(push, 1) // exact fit - no padding
struct MyStruct
{
   char b; 
   int a; 
   int array[2];
 };   
 #pragma pack(pop) //back to whatever the previous packing mode was

But most probably, you will need to run macro in compiled mode.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.