Olá!
Recentemente instalei o MySQL, seguindo um excelente tutorial postado pelo Toledo mas, ainda não iniciei meus testes com ele.
Tenho alguns testes feitos com SQL Server com ADO, onde crio um banco de dados e algumas tabelas no mesmo, que compartilho abaixo. Creio que eja possÃvel adaptar isto para MySQL e acrescentar a rotina de backup.
#include "ado.ch"
#include "box.ch"
#include "hbcompat.ch"
REQUEST HB_CODEPAGE_PTISO
STATIC oCn As Object
//------------------------------------------------------------------------------
INIT PROCEDURE AppInit()
LOCAL oErr As Object
LOCAL cCnString As Character
Altd()
RELEASE GetList
HB_CDPSELECT("PTISO")
Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
SetMode(50,150)
SetBlink( .F. )
SetColor( "W+/N, N/W*" )
CLS
DispBox( 0,0,2, MaxCol(), Space(9), "W+/RB" )
DispBox( 3,0,MaxRow() - 1, MaxCol() * .25, Space(9), "N/N" )
DispBox( 3,(MaxCol() * .25) + 1,MaxRow(), MaxCol() , Space(9), "N/BG+" )
DispBox( MaxRow(), 0, MaxRow(), MaxCol(), Space(9), "N/W" )
DispOutAt( 1,0, PadC("Testando Harbour + ADO + SQL Server",MaxCol()), "W+/RB" )
Try
cCnString := "Provider=SQLNCLI10;Server=(Local);Database=Harbour;Uid=sa;Pwd=xyz;"
oCn := win_OleCreateObject("ADODB.Connection")
oCn:ConnectionString := cCnString
oCn:CursorLocation := adUseClient
oCn:Mode := adModeReadWrite
Catch oErr
Alert( "Não foi possÃvel conectar ao banco de dados.;Erro: " + oErr:description, { " Fechar " } )
__Quit()
Finally
End
RETURN
//------------------------------------------------------------------------------
FUNCTION AppMain()
LOCAL oRs As Object
LOCAL oErr As Object
LOCAL cSql As Character
Altd()
Try
// Cria novo banco de dados, se não existir
oRs := ExecuteSQL( "SELECT IsNull( db_id('harbour'),0 ) As dbID" )
If ! oRs:Eof()
If oRs:fields("dbID"):value == 0
TEXT INTO cSql
CREATE DATABASE Harbour
ON
( NAME = Harbour_dat,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Harbour.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
( NAME = Harbour_log,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Harbour.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB ) ;
ENDTEXT
oCn:Open()
oCn:Execute( cSql )
Alert( "Banco de dados 'Harbour' criado com sucesso.",, "W+/B" )
Else
Alert( "Banco de dados 'Harbour' já existe e não pode ser criado novamente.",, "W+/B" )
Endif
Else
Alert( "RS vazio" )
Endif
TablesGenerator( ScriptGenerator() )
Alert( "O banco de dados da aplicação foi criado com sucesso: 'Harbour'.",, "W+/B" )
Catch oErr
If oErr != NIL
Alert(oErr:description)
Endif
Alert( "Ocorreram erros.;O banco de dados da aplicação não foi criado com sucesso: 'Harbour'.",, "W+/B" )
Finally
If oRs != NIL .And. oRs:state() == adStateOpen
oRs:Close()
Endif
If oCn:state() == adStateOpen
oCn:Close()
Endif
oRs := NIL
oCn := NIL
End
RETURN
//------------------------------------------------------------------------------
EXIT PROCEDURE AppExit()
HB_GCAll( .T. )
CLS
RETURN
//------------------------------------------------------------------------------
STATIC FUNCTION ExecuteSql( cSql )
LOCAL oRs As Object
LOCAL oErr As Object
LOCAL cCnString As Character
Try
oRs := win_OleCreateObject("ADODB.RecordSet")
With Object oRs
:activeConnection := oCn:connectionString
:cursorLocation := adUseClient
:cursorType := adOpenDynamic
:lockType := adLockOptimistic
:maxRecords := 100000
:cacheSize := 100
:source := cSql
:open()
End With
Catch oErr
Throw( oErr )
End
RETURN oRs
//------------------------------------------------------------------------------
STATIC FUNCTION TablesGenerator( aScripts )
LOCAL cSql As Character
LOCAL lRet As Logical
lRet := .F.
Try
oCn:Open()
For Each cSql In aScripts
oCn:Execute( cSql )
Next
lRet := .T.
Catch oErr
Throw( oErr )
Finally
If oCn:state() = adStateOpen
oCn:Close()
Endif
End
RETURN lRet
//------------------------------------------------------------------------------
STATIC FUNCTION ScriptGenerator()
LOCAL cSql As Character
LOCAL aRet As Array
aRet := {}
TEXT INTO cSql
USE [Harbour]
/****** Object: Table [dbo].[tbAddressType] Script Date: 09/04/2014 20:18:23 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
CREATE TABLE [dbo].[tbAddressType](
[idAddressType] [int] IDENTITY(1,1) NOT NULL,
[dsAddressType] [varchar](20) NOT NULL,
CONSTRAINT [XPKtbAddressType] PRIMARY KEY CLUSTERED
(
[idAddressType] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_PADDING OFF
ENDTEXT
AAdd( aRet, cSql )
//
TEXT INTO cSql
USE [Harbour]
/****** Object: Table [dbo].[tbCountry] Script Date: 09/04/2014 20:20:26 ******/
IF OBJECT_ID('dbo.tbNewItens', 'U') IS NULL
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
CREATE TABLE [dbo].[tbCountry](
[idCountry] [char](3) NOT NULL,
[dsCountry] [varchar](50) NOT NULL,
[idContinent] [char](1) NOT NULL,
[dsContinent] [varchar](50) NOT NULL,
CONSTRAINT [XPKtbCountry] PRIMARY KEY CLUSTERED
(
[idCountry] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_PADDING OFF
ENDTEXT
AAdd( aRet, cSql )
//
TEXT INTO cSql
/****** Object: Table [dbo].[tbCustomer] Script Date: 09/04/2014 19:56:51 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
CREATE TABLE [dbo].[tbCustomer](
[idCustomer] [int] IDENTITY(1,1) NOT NULL,
[dsEmail] [varchar](100) NULL,
[dsPassword] [varchar](50) NULL,
[dsPwdCrypto] [varchar](250) NULL,
[dsName] [varchar](200) NOT NULL,
[dsLastName] [varchar](250) NULL,
[dsNickName] [varchar](20) NULL,
[idProfile] [int] NOT NULL,
[dtCreated] [datetime] NOT NULL,
[dtLastLogin] [datetime] NULL,
[dtLastOrder] [datetime] NULL,
[fgReceiveEmail] [tinyint] NOT NULL,
[fgActiveLogin] [tinyint] NOT NULL,
[idVipCustomerMain] [varchar](40) NULL,
[dtModified] [datetime] NOT NULL,
[dtMadeInModified] [datetime] NULL,
[dtMadeInCreated] [datetime] NULL,
[fldCustomer] [tinyint] NOT NULL,
[fgReceiveEmailFormat] [tinyint] NOT NULL,
[dtSync] [datetime] NULL,
[bitEstrangeiro] [bit] NULL,
CONSTRAINT [PK_tbReseller] PRIMARY KEY CLUSTERED
(
[idCustomer] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[tbCustomer] ADD CONSTRAINT [DF_tbCustomer_fldCustomer] DEFAULT ((0)) FOR [fldCustomer]
ALTER TABLE [dbo].[tbCustomer] ADD CONSTRAINT [DF_tbCustomer_fgReceiveEmailFormat] DEFAULT ((0)) FOR [fgReceiveEmailFormat]
ALTER TABLE [dbo].[tbCustomer] ADD CONSTRAINT [DF_tbCustomer_bitEstrangeiro] DEFAULT ((0)) FOR [bitEstrangeiro]
ENDTEXT
AAdd( aRet, cSql )
//
TEXT INTO cSql
/****** Object: Table [dbo].[tbCustomerDetail] Script Date: 09/04/2014 19:58:46 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
CREATE TABLE [dbo].[tbCustomerDetail](
[idCustomer] [int] NOT NULL,
[dsCNPJ] [varchar](18) NULL,
[dsIE] [varchar](15) NULL,
[dsIM] [varchar](15) NULL,
[dsResponsible] [varchar](30) NULL,
[dsCpf] [varchar](15) NULL,
[dtBirthDate] [datetime] NULL,
[dsSex] [char](1) NULL,
[dsCelularPhone] [varchar](20) NULL,
[fgPfPj] [char](1) NOT NULL,
[dsRG] [varchar](25) NULL,
[dsPhoneDDD1] [varchar](5) NULL,
[dsPhone1] [varchar](30) NULL,
[dsBranchPhone1] [varchar](20) NULL,
[dsPhoneDDD2] [varchar](5) NULL,
[dsPhone2] [varchar](30) NULL,
[dsBranchPhone2] [varchar](20) NULL,
[dsPhoneDDD3] [varchar](5) NULL,
[dsPhone3] [varchar](30) NULL,
[dsBranchPhone3] [varchar](20) NULL,
[dsDispatcherAgency] [varchar](10) NULL,
[fgSMS] [tinyint] NOT NULL,
CONSTRAINT [PK_tbCustomerDetail] PRIMARY KEY CLUSTERED
(
[idCustomer] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[tbCustomerDetail] ADD CONSTRAINT [DF_tbCustomerDetail_fgSMS] DEFAULT ((0)) FOR [fgSMS]
ALTER TABLE [dbo].[tbCustomerDetail] WITH CHECK ADD CONSTRAINT [FK_tbCustomer_tbCustomerDetail] FOREIGN KEY([idCustomer])
REFERENCES [dbo].[tbCustomer] ([idCustomer])
ALTER TABLE [dbo].[tbCustomerDetail] CHECK CONSTRAINT [FK_tbCustomer_tbCustomerDetail]
ENDTEXT
AAdd( aRet, cSql )
//
TEXT INTO cSql
/****** Object: Table [dbo].[tbCustomerDeliveryAddr] Script Date: 09/04/2014 20:00:31 ******/
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
SET ANSI_PADDING ON
CREATE TABLE [dbo].[tbCustomerDeliveryAddr](
[idCustomerDeliveryAddr] [int] IDENTITY(1,1) NOT NULL,
[dsDestinationName] [varchar](200) NOT NULL,
[dsAddress] [varchar](80) NOT NULL,
[dsNumber] [varchar](10) NOT NULL,
[dsComplement] [varchar](30) NULL,
[dsZip] [varchar](10) NULL,
[dsCity] [varchar](40) NULL,
[dsDistrict] [varchar](40) NULL,
[idCustomer] [int] NOT NULL,
[idCountry] [char](3) NOT NULL,
[idState] [char](2) NOT NULL,
[dsReferenceAddress] [varchar](200) NULL,
[fgCustomerAddress] [tinyint] NOT NULL,
[fgMainAddress] [tinyint] NOT NULL,
[dsParentHood] [varchar](20) NULL,
[dsEmail] [varchar](100) NULL,
[dsProvince] [varchar](30) NULL,
[dsDeliveryName] [varchar](200) NULL,
[dsPhoneDDD1] [varchar](5) NULL,
[dsPhone1] [varchar](30) NULL,
[dsBranchPhone1] [varchar](20) NULL,
[dsPhoneDDD2] [varchar](5) NULL,
[dsPhone2] [varchar](30) NULL,
[dsBranchPhone2] [varchar](20) NULL,
[dsPhoneDDD3] [varchar](5) NULL,
[dsPhone3] [varchar](30) NULL,
[dsBranchPhone3] [varchar](20) NULL,
[idAddressType] [int] NULL,
[dtMadeInCreated] [datetime] NULL,
[dtMadeInModified] [datetime] NULL,
CONSTRAINT [PK_tbCustomerAddr] PRIMARY KEY CLUSTERED
(
[idCustomerDeliveryAddr] ASC
)WITH (PAD_INDEX = ON, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
) ON [PRIMARY]
SET ANSI_PADDING OFF
ALTER TABLE [dbo].[tbCustomerDeliveryAddr] WITH CHECK ADD CONSTRAINT [FK_tbAddressType_tbCustomerDeliveryAddr] FOREIGN KEY([idAddressType])
REFERENCES [dbo].[tbAddressType] ([idAddressType])
ALTER TABLE [dbo].[tbCustomerDeliveryAddr] CHECK CONSTRAINT [FK_tbAddressType_tbCustomerDeliveryAddr]
ALTER TABLE [dbo].[tbCustomerDeliveryAddr] WITH CHECK ADD CONSTRAINT [FK_tbCountry_tbCustomDeliveryAddr] FOREIGN KEY([idCountry])
REFERENCES [dbo].[tbCountry] ([idCountry])
ALTER TABLE [dbo].[tbCustomerDeliveryAddr] CHECK CONSTRAINT [FK_tbCountry_tbCustomDeliveryAddr]
ALTER TABLE [dbo].[tbCustomerDeliveryAddr] WITH CHECK ADD CONSTRAINT [FK_tbCustomer_tbCustomerAddr] FOREIGN KEY([idCustomer])
REFERENCES [dbo].[tbCustomer] ([idCustomer])
ALTER TABLE [dbo].[tbCustomerDeliveryAddr] CHECK CONSTRAINT [FK_tbCustomer_tbCustomerAddr]
ENDTEXT
AAdd( aRet, cSql )
RETURN aRet
//------------------------------------------------------------------------------