Files
harbour-core/harbour/contrib/hbmysql
Przemyslaw Czerpak b1d68f0a5e 2010-01-14 01:44 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/src/compiler/harbour.y
  * harbour/src/compiler/harbour.yyh
  * harbour/src/compiler/harbour.yyc
    ! pacified compile time error when ... is used as parameter in _HB_MEMBRER
      declaration. TODO: Remove or fix this strong typing grammar rules.

  * harbour/src/debug/dbgtwin.prg
  * harbour/src/debug/dbgtmenu.prg
  * harbour/src/debug/tbrwtext.prg
  * harbour/src/debug/debugger.prg
  * harbour/src/debug/dbgtinp.prg
  * harbour/src/rtl/tbcolumn.prg
  * harbour/src/rtl/listbox.prg
  * harbour/src/rtl/pushbtn.prg
  * harbour/src/rtl/treport.prg
  * harbour/src/rtl/radiogrp.prg
  * harbour/src/rtl/tthreadx.prg
  * harbour/src/rtl/checkbox.prg
  * harbour/src/rtl/tsymbol.prg
  * harbour/src/rtl/teditor.prg
  * harbour/src/rtl/tmenuitm.prg
  * harbour/src/rtl/tbrowse.prg
  * harbour/contrib/hbmysql/tmysql.prg
  * harbour/contrib/xhb/stream.prg
  * harbour/contrib/xhb/trpccli.prg
  * harbour/contrib/xhb/hblognet.prg
  * harbour/contrib/xhb/tfile.prg
  * harbour/contrib/xhb/tframe.prg
  * harbour/contrib/xhb/htjlist.prg
  * harbour/contrib/xhb/hblog.prg
  * harbour/contrib/xhb/trpc.prg
  * harbour/contrib/xhb/thtm.prg
  * harbour/contrib/xhb/tcgi.prg
  * harbour/contrib/xhb/ttable.prg
  * harbour/contrib/xhb/txml.prg
  * harbour/contrib/xhb/hjwindow.prg
  * harbour/contrib/xhb/htmutil.prg
  * harbour/contrib/hbodbc/todbc.prg
  * harbour/contrib/hbfbird/tfirebrd.prg
  * harbour/contrib/xpp/tthreadx.prg
  * harbour/contrib/hbpgsql/tpostgre.prg
  * harbour/contrib/hbgd/gdchart.prg
  * harbour/contrib/hbgd/gdimage.prg
  * harbour/contrib/hbgd/gdbar.prg
  * harbour/contrib/hbgd/gdbarcod.prg
  * harbour/contrib/hbmisc/twirler.prg
  * harbour/contrib/hbtip/thtml.prg
  * harbour/contrib/hbtip/cgi.prg
  * harbour/contrib/hbtip/httpcli.prg
  * harbour/contrib/hbtip/smtpcli.prg
  * harbour/contrib/hbtip/client.prg
  * harbour/contrib/hbtip/ftpcli.prg
  * harbour/contrib/hbtip/mail.prg
  * harbour/contrib/hbtip/popcli.prg
  * harbour/contrib/hbwin/win_tprn.prg
  * harbour/contrib/hbbtree/tbtree.prg
  * harbour/utils/hbformat/hbformat.prg
    ! fixed class method declarations to be synced with method implementations
      All of the above missdeclarations were detected by compilation with:
         HB_USER_PRGFLAGS=-DHB_CLS_PARAMS_ERR
      Few years ago in hbclass.ch I defined PP rules to force strict method
      declarations but I had to disable them due to problems with old PP.
      I defined HB_CLS_NO_PARAMS_ERR and left this note in hbclass.ch:
         > I have to enable this definition by default until we will not fix
         > preprocessor. [druzus]
      Current PP code works correctly so we can remove it and activate this
      code. Anyhow as above commit shows a lot of code has been created with
      wrong declarations. I fixed Harbour core code (except HBQT, HBXBP and
      GTWVG - I hope Pritpal or Viktor will fix it) but setting
      HB_CLS_PARAMS_ERR as default will exploit a lot of similar problems in
      user code so I would like the hear other developers' opinions about it.
2010-01-14 00:45:19 +00:00
..

/*
 * $Id$
 */

                +---------------------------------------------------------------+
                | 22/november/2001 - Harbour MySQL access classes - readme file |
                +---------------------------------------------------------------+


This is work in progress, so it has to be fully tested and needs a few more methods to cover MySQL possibilities.


This set of files gives you a mean to access a MySQL server, I've developed and tested them on a OS/2 platform,
In their present state MySQL classes are made up of these files:

mysql.c     :  low level wrapper around MySQL client API. It requires libmysqlclient.a library
mysql.ch    :  clipper level defines of MySQL types
tmysql.prg  :  MySQL access classes
test.prg    :  a little test program which wont work for you :-) since it uses a .dbf file not
               provided. Use it as a small tutorial of tmysql.prg provided functions.

You will also need all .h files from include subdir of your installed MySQL server, at a bare minimum
they are:

      mysql.h, mysql_com.h, mysql_version.h

(under OS/2 with OS/2 port of MySql you need to use the ones from 3.21.33b build which is the only one with
a single threaded libmysqlclient.a client library and works ok even with latest MySQL/2 availble).

To build this library on Windows (using freely available Borland C++ compiler) you
need to follow these steps:

1) go to www.mysql.com and download any version you like of mysql.
   So far I've tested only 3.x versions of MySQL. Install it.
   Now you have an include subdir with .h files with the same version
   number as your libmysql.dll.

   This is very important. You need to use .h files from the package you
   install.

2) Link hbmysql.lib and libmysql.lib to your harbour program (you can try to
   recompile dbf2mysql inside \contrib\hbmysql just to test everything) and
   be sure to have libmysql.dll on your path.


                              +---------------------+
                              |  Available Classes  |
                              +---------------------+


tmysql.prg defines four classes:

TMySQLServer:  manages access to a MySQL server and returns an oServer object to which you'll send all your
               queries;
TMySQLQuery:   a standard query to an oServer with joins. Every query has a GetRow() method
               which on every call returns a TMySQLRow object which, in turn, contains requested fields.
               Query objects convert MySQL answers (which is an array of strings) to clipper level types.
               At present time N (with decimals), L, D, and C clipper types are supported.
TMySQLTable:   It's a descendant of a TMySQLQuery and you'll receive it when your query has no joins.
               It adds Update(), Append() and Delete() methods which receive a TMySQLRow object and
               reflect changes to the MySQL table from which they come.
               Please note that TMySQLQuery objects don't have these methods, so, if you want to change
               a row received from a TMySQLQuery object you need to construct a valid SQL query and submit
               it to an oServer object.
TMySQLRow:     Every row returned by a SELECT is converted to a TMySQLRow object. This object handles
               fields and has methods to access fields given a field name or position.


I'm aware that this brief document doesn't explain a lot about MySQL access classes and I'm sorry for that
(please read the souce code, it has quite a few comments which can help you understand what's going on)

I'll try to update it as work on these classes goes by and I'll like to receive feedbak and suggestions
from users (if any :-))

Excuse my poor english and happy selecting :-)

Maurilio Longo - <maurilio.longo@libero.it>

New Enhacemets

Added support to mediumint and mediumblob type on the follow classes
TMySqlRow:FieldType() will Return an "B" for mediumblob and an "I" Mediumint field
TMySQLServer:CreateTable(cTable, aStruct,cPrimaryKey,cUniqueKey,cAuto) Added tree new parameters
     Cprimarykey tell to use the field defined as an primaty key.
     CUniqueKey  tell that this field has unique values
     cAuto       Tell that this field should be auto_increment
     Also to create an Table with mediumint and mediumblob field types use
     {{"Data","B",1,0},{"Ammount","I",9,0}} in the astructure array
     To save an File to an mediumblob field use
     cBuffer:=FILETOSQLBINARY(cFile) . this will read up the file and return an string formated to mysql requeriments

Luiz Rafael Culik - <culik@sl.conex.net>