Manual Sqllib RDD
Manual Sqllib RDD
Manual Sqllib RDD
AbrangeaSQLLIBv1.5deAbrilde2007.
Reproduototalouparcialproibida
excetocomconsentimentoexpressoeporescritodoautor
Reviso2.8Abrilde2007 VailtonRenatorenato@sqllib.com
ndiceGer al
Intr oduo.............................................................................................................. Legenda............................................................................................................ Agradecimentos................................................................................................. InstalaoePr imeir osPassos ................................................................................................... ComoinstalaraSQLLIB....................................................................................................... Quaisbibliotecas(*.LIB)eunecessitoutilizaremmeuprojeto?........................................... ProblemasnaconexoaoservidorSQL?............................................................................... GuiadeRefer encia .................................................................................................. Comandos
SQLCONNECTON................................................................................................. SQLCONNECT(comStringsdeConexo)............................................................ SQLDISCONNECT................................................................................................. SQLEXECUTE...................................................................................................... SQLTRANSLATEPATH.......................................................................................... SQLTRANSLATECASE........................................................................................... SQLCUSTOMINDEXES........................................................................................... SQLPACKETSIZE................................................................................................. SQLCURRENTPACKETSIZE.................................................................................... SQLFULLDELETE................................................................................................. SQLFILTER........................................................................................................ COPYTABLE........................................................................................................ DELETETABLE..................................................................................................... DELETEINDEX..................................................................................................... RENAMETABLE..................................................................................................... RENAMEINDEX..................................................................................................... STARTTRANSACTION............................................................................................ ENDTRANSACTION................................................................................................ COMMITTRANSACTION........................................................................................... ROLLBACKTRANSACTION....................................................................................... CLEARINDEXES................................................................................................... SELECTSCHEMA................................................................................................... USE.................................................................................................................... USESQL/USEAS.............................................................................................. I I1 I2 II II1 II2 II3 III III1 III2 III3 III4 III5 III6 III7 III8 III9 III10 III11 III12 III13 III14 III15 III16 III17 III18 III19 III20 III21 III22 III23 III24 IV IV1 IV2 IV3
Funes.................................................................................................................. Tr aduodenomesdearquivos
SQLParseStyle()................................................................................................ SQLParseCase()................................................................................................. SQLParse()........................................................................................................
Ger enciamentodeconexes
SQLConnect()..................................................................................................... SQLConnParse()................................................................................................. SQLDisconnect()................................................................................................ SQLGetConnection()........................................................................................... SQLSetConnection()........................................................................................... SQLGetConnections()......................................................................................... SQLGetConnectionInfo().................................................................................... SQLGetRddName()................................................................................................ SQLErrorMsg()................................................................................................... SQLErrorNO().................................................................................................... SQLPacketSize()................................................................................................ IV4 IV5 IV6 IV7 IV8 IV9 IV10 IV11 IV12 IV13 IV14
ExecuodecomandosSQL
SQLExecute()...................................................................................................... SQLArray().......................................................................................................... SQLArrayAssoc()................................................................................................. IV15 IV16 IV17
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.2
SQLNullDate().................................................................................................... SQLNull()...........................................................................................................
IV18 IV19
Manipulaodedados
SQLFilter()........................................................................................................ SQLRefresh()...................................................................................................... SQL_AffectedRows()............................................................................................ SQL_FullDelete()................................................................................................ IV20 IV21 IV22 IV23
Manipulaodetabelas/ndices
SQLCreateFlags()................................................................................................ DBCreate().......................................................................................................... TABLE()............................................................................................................... INDEX()............................................................................................................... TAG().................................................................................................................. DATABASE().......................................................................................................... TrueReccount()................................................................................................... SQLCopyTable()................................................................................................... SQLRenameTable()................................................................................................ SQLRenameIndex()................................................................................................ SQLDropTable()................................................................................................... SQLDropIndex()................................................................................................... SQLAlterTable()................................................................................................. SQLUseCustomIndexes()....................................................................................... IV24 IV25 IV26 IV27 IV28 IV29 IV30 IV31 IV32 IV33 IV34 IV35 IV36 IV37
Ger enciamentodetransaes
SQLBeginTrans()................................................................................................ SQLEndTrans()................................................................................................... SQLCommit()....................................................................................................... SQLRollBack()................................................................................................... SQLTransCount()................................................................................................ IV38 IV39 IV40 IV41 IV42
Funesdeconverso
SQLDate().......................................................................................................... SQLStr()............................................................................................................ SQLNTrim()........................................................................................................... ToString()........................................................................................................ IV52 IV53 IV54 IV55
Funesdiver sas
SQLRowID()........................................................................................................ SQLVersion()..................................................................................................... SQLLIB()............................................................................................................ IV56 IV57 IV58
Backup&Restor e
SQLBackupStart().............................................................................................. SQLBackupEnd().................................................................................................. SQLBackupRestore()........................................................................................... SQLBackupTable().............................................................................................. SQLBackupRoutines()......................................................................................... SQLBackupBlock().............................................................................................. IV59 IV60 IV61 IV62 IV63 IV64
Schemas
SQLSchema()....................................................................................................... IV65
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.3
SQLSystemSChema().............................................................................................
IV66
FunesdebaixonveldaAPI
_SQL_GetPointer()............................................................................................. _SQL_GetConn().................................................................................................. _SQL_SystemID()................................................................................................ _SQL_SystemIDStr()........................................................................................... _SQL_TableStyle()............................................................................................. _SQL_TableName()............................................................................................... _SQL_FullTableName()........................................................................................ _SQL_TableSchema()............................................................................................ IV67 IV68 IV69 IV70 IV71 IV72 IV73 IV74
A1 A2 A3
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.4
I Intr oduo
OProjetoSQLLIBfoidesenvolvidoparasuprirumagrandedeficinciadaatualcomunidadexBase, necessidadeestadeconexocombancodedadosremotosnaslinguagensHarbourexHarbour. Anteriormente estes usurios xBase no contavam comuma soluoque fosse acessvel todos para conexocomosbancosdedadosremotos,limitandoseapenasaosantigosarquivosDBFs(DataBase Files). Foipensandonissoquensconstrumosentoumaferramentamodernaquesurgiuparapossibilitare tornarvivelestetipodecomunicaocliente/servidor,deumaformaseguraeeficiente. ASQLLIBestsendoprojetadaparapermitirconexesremotasdemodotransparenteviaRDDcom asseguintesbasesdedados: MySQL,PostgreSQL, Firebirde ODBC. Afacilidadeeaperformancedesuautilizaopermitemque,comumconjuntomnimodeadaptaes, ossistemaspossammigrardemodotransparenteparataisSGBDs(SistemasGerenciadoresdeBanco deDadosouservidoresSQL),evitandoassimumagrandecurvadeaprendizadoeaproveitandotodaa experinciadoprofissionalxBase,almderepresentarumaexcelenterelaocusto/benefcio. ASQLLIBumasoluocompletaparaaatualcomunidade,comsuporteeatualizaesconstantes mantidaspornossaequipededesenvolvimento. EstedocumentocontminformaesimportantessobreoscomandosefunessuportadospelaSQL LIB.Esperamosqueestadocumentaosejadegrandeajudaparatodos,especialmenteosnovosque desejaminiciarnoempolgantemundodoSQL!
1. conesutilizados
Asexplicaeseomaterialcontidonestedocumentoquandoapropriadosseroacompanhadosdeum coneparaidentificaraimportnciadaorientaoquesesegue.EisabaixonatabelaI1oscones empregadosesuasrespectivasimportncias: Esteconedenotamateriainformativa,comoumaexplanaodealgumassunto relativoaocontexto Esteconeidentificaummaterialimportante queexigeatenoepodelhepouparum tempo,talcomoumadicaoumaceteenvolvendoalgumafunoemSQL. Esteconeindicaalgumaadvertnciaouinformaodeextremaimportncia.
TabelaI1
2. Agr adecimentos
AgradeotodosqueacreditaramemmeutrabalhomasespecialmenteFrankLenonRodriguespela ajudaeapoioprestadosetambm KleyberDrickB.Ribeiro pelaatenonosmomentosdifceisdese domaroFivewindevidominhafaltadeexperinciainicial.Masgostariadeespecialmenteagradecer aquelas pessoas queno meapoiaramem nenhum momentoepelo contrrio atdificultaram e em muitoascoisasparamim,nodecorrerdestepercurso. Sendoassimtodosagradeo:obrigado,muito obrigadoporutilizarnossasferramentas. Desejosucessotodoseataprxima!
VailtonRenato
SQLLIB,WxWeb,MyMake&xDevStudio Developer
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.5
1.Comoinstalar aSQLLIB
Oprocessodeinstalao paraambosomesmo. Descompacteoarquivo.ZIPeexecuteoaplicativode instalaocontidodentrodopacote.Certifiquesededescompactarosarquivosnamesmapastadoteu compilador.
VocpodeseguramenteinstalaraSQLLIBemoutrodiretrio quenosejao do teucompilador.Nestecasosernecessrio quevoccopieosarquivosdeINCLUDEeasLIBsparaassuasdevidaspastas,ondeestinstaladooseuHarbourou xHarbour.
Aps o trmino do processo acima, voc j estar tudo pronto para utilizar a ferramenta. Como downloadadicional,recomendamosquevocbaixetambmoDBF2SQL(antigoDBF2MYSQL) quese encontraparadownloademnossosite,afimdelheajudarnoprocessodemigraodesuasbasesde dadosatuaisemDBFparaoservidorSQL.
2.QuaisLIBseunecessitoemmeupr ojeto?
ASQLLIBumprojetofantsticopeloqueelasepropeafazeretemfeito:ofereceromesmoRDD paratodasasversesdoHarbouredoxHarbouratualmentemaisusadas.Sendoassim,temoshojeno cenrio10 versesda SQLLIBcadaumacompiladaeotimizada paraseucompiladorespecfico: SuporteparaHarbourverso45.0 SuporteparaxHarbourverso0.99.0,0.99.1,0.99.2,0.99.3,0.99.4, 0.99.50,0.99.51a(FW2.6),0.99.51(FW2.7),99.60eversesfuturas. QuandovocinstalaaSQLLIBestarrecebendoversesdaRDDparavrioscompiladores. necessriosaberidentificarqualaLIBcorretaparaexecuodoseuaplicativo.Umexemploda nomenclaturautilizadaparaidentificaomostradocomonesteexemplo:
P:\SQLLIB\COMERCIAL\LIB>dir OvolumenaunidadePP43.2HT OnmerodesriedovolumeCCD86FDF PastadeP:\SQLLIB\COMERCIAL\LIB 30/01/200620:45<DIR>.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.6
30/01/200620:45<DIR>.. 17/11/200419:3916.384libmysql.lib 28/01/2006 19:39 102.912blibpq.lib 30/01/200620:45148.480sqllib_HB_450.LIB 30/01/200620:44149.504sqllib_xHB_0990.LIB Istoidentificaqualo 30/01/200620:44149.504sqllib_xHB_0991.LIB 30/01/200620:43 149.504sqllib_xHB_0992.LIB compiladorsuportadoporesta LIBHarbourouxHarbour 30/01/200620:36149.504sqllib_xHB_0993.LIB 30/01/200620:35150.016sqllib_xHB_0994.LIB 30/01/200620:35150.016sqllib_xHB_09950.LIB 30/01/200620:34146.944sqllib_xHB_09951.LIB Istoindicaaversodo 30/01/200620:34150.016sqllib_xHB_09951a.LIB compiladorsuportado. 11arquivo(s)1.359.872bytes Nestecaso,oxHB0.99.50 2pasta(s)907.030.528bytesdisponveis P:\SQLLIB\COMERCIAL\LIB>
Para identificarmos a verso correta a ser utilizada simples, basta observar o esquema acima. Por exemplo, se estivermos compilando com o xHarbour verso 0.99.50, iremos utilizar a sqllib_xhb_09950.lib emnossoprojeto. Visto que a SQL LIB oferece acesso nativo, iremos necessitar tambm de algumas libs adicionais, conforme o servidor que iremos nos conectar. A tabela II1 mostra quais arquivos adicionais so necessrios,dependendo dodriverqueiremosutilizar:
Arquivo DriverRDD
libmysql.lib EstalibcontmasrotinasdeacessoaobancoMySQL. blibpq.lib
EstalibutilizadapelaRDDparaefetuarconexocomoPostgreSQL.
TabelaII1
Lembrando que tais arquivos so obrigatrios apenas quando se deseja utilizar o respectivo banco. Sendo assim, um programador que ir utilizar MySQL apenas pode decidir no incluir as LIBs do PostgreSQLouviceversa,tornandootamanhodoseuexecutvelfinalmenor.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.7
Problemascomautenticaosofceisdese solucionar,maso procedimentopara seefetuar estaconfiguraomuda deacordocomoSGBDutilizado.Eisalgumasrefernciasparasua pesquisa(todosemportugus): Umartigointeressantesobreesteassuntoem MySQL,estdisponvelnestelink: http://dev.mysql.com/doc/refman/4.1/pt/addingusers.html http://dev.mysql.com/doc/refman/4.1/pt/oldclient.html (emportugus) http://dev.mysql.com/doc/refman/5.0/en/oldclient.html(emingls) EmPostgreSQLnecessrioeditaroarquivopg_hba.conf liberandoacesso,umexemplo encontradonesteLINKepodeserdeajudanestescasos: http://pgdocptbr.sourceforge.net/pg80/clientauthentication.html#EXAMPLEPG HBA.CONF
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.8
No entanto, visando auxiliar aqueles usurios que estejam migrando de outras ferramentas, disponibilizamostambmuma sintaxeadicional paraestecomando:
cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=jose" SQLCONNECTcConnINTOnMySQL
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.9
COMANDOS
A SQL LIB introduz diversos comandos novos ao programador, tanto para controle de conexes, gerenciamentodastabelasouaindaexecuodecomandosSQLdiretamentenoservidor.Naseoque se segue, listaremos todos os novos comandos introduzidos pela SQL LIB e listados no arquivo SQLLIB.CHqueacompanhaainstalaodaRDDporpadro.
1. SQLCONNECTON
EstabilizaumaconexoumservidorSQL suportadopelaSQLLIBeretornaonmerodaconexo sebemsucedidoouzeroemcasodeerro. Sintaxe:
SQLCONNECTON<cHost> [PORT<nPort>] [DATABASE<cDb>] [USER<cUser>] [PASSWORD<cPassword>] [OPTIONS<nFlags>] [<LIB,DRIVER,RDD,VIA><cDriverName>] [INTO<nOutPutVar>]
Onde:
<cHost>
Indica o nome ou o IP do micro qual voc deseja se conectar e em alguns casospodeserutilizadoapalavrachavelocalhostindicandoqueoservidorest instaladonamesmaCPUondeoaplicativoestsendoexecutado. o nmero da porta que deve ser utilizada para conexo ao servidor. Por exemplo, podemos citar que normalmente o MySQL est operando na porta 3306eoPostgreSQL na5432eassimpordiante.Esteparmetroopcionale serpreenchidocomovalorpadrodecadabancosenoforespecificado. onomedobancodedadosaoqualdevemosinicialmentenosconectar.Alguns servidores como o MySQL permitem que seja omitido este parmetro no comando de conexo, pois posteriormente podese selecionar um Database diferente logo aps a conexo estar estabelecida. No entanto, para outros servidorescomooPostgreSQLobrigatrioapassagemdesteparmetroeno permitidaaalteraodomesmoumavezjestabelecidaaconexo. o nome do usurio utilizado para autenticao no servidor. Este usurio j deveestarpreviamentecadastradonoservidorSQLedevepossuirprivilgiode acessoparaqueaconexosejaestabelecidacomsucesso. asenhautilizadaparaautenticarousurioespecificadonoparmetroanterior juntoaoservidor. umvaloropcionalconformeatabelaabaixo:
SQL_NO_ERROR
<nPort>
<cDB>
<cUser>
<cPassword>
<nFlags>
Indica que quaisquer erros que ocorram durante o processo devem ser suprimidos. Consulte o valor de SQLERRORNO()parachecaraocorrnciadealgumerro. Oponomaisutilizada.
SQL_NO_WARNING
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.10
<cDriverName>
Identificaonomedodriverquevocdesejautilizarparaefetuarestaconexo.A SQLLIBsuporteatualmenteosseguintesdrivers:
MYSQL
IndicaqueaSQLLIBdeveutilizarodrivernativopara MySQLparacuidardestaconexo. No entanto para que voc possa linkar o suporte MySQL noseuaplicativo,noesqueadeadicionar no inicodoseucdigofonteasseguinteslinhas:
REQUESTSQLLIB REQUESTMYSQL
As duas linhas abaixo produzem o mesmo efeito do exemplo acima, pois chamam o driver do PostgreSQL porumdosseusapelidos:
REQUESTSQLLIB REQUESTPostgreSQL
Se a conexo for efetuada com sucesso, ela tornase a conexo ativa. Consulte a funo SQLSETCONNECT()paramaioresdetalhessobreogerenciamentodeconexesdaSQLLIB. Exemplo:
#include'sqllib.ch' REQUESTSQLLIB REQUESTMySQL /*IstoincluisuporteMySQLemnossoaplicativo*/ REQUESTPGSQL/*SuportePostgres*/ functionMain() SQLCONNECTON'localhost' PORT3306 DATABASE"test" USER"root" PASSWORD'' OPTIONSSQL_NO_ERROR LIB'MySQL' IFSQLErrorNO()>0 alert('Noconectou') else alert('Conexoestabelecidacomsucesso!')
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.11
endif
Consultetambm:
SQLCONNECT(comStringsdeConexo) SQLDISCONNECT SQLSETCONNECT()
2. SQLCONNECT(comStr ingsdeConexo)
A SQL LIB a partir da verso 1.0, disponibiliza uma forma modificada do comando SQL CONNECT com suporte Stringsde conexo. Nesta sintaxe, este comando processa uma string passada como argumento e estabiliza uma conexo ao servidor utilizando os parmetros contidos nestastring. Estecomandoretornaonmerodaconexosebemsucedidoouzeroemcasodeerro.Noteainda que esta funo no emite nenhum erro em caso de falha , sendo necessrio verificar SQLERRORNO()e SQLERRORMSG()paraaveriguaromotivoqueocasionouafalhanaconexo. Sintaxe:
SQLCONNECT<cConn>[INTO<nOutPutVar>]
Onde:
<cConn>
Representa a string de conexo contendo os parmetros necessrios para conectarse ao servidor, bem como o nome do prprio driver RDD utilizado paragerenciarestaconexo. Todososparmetrosdestastringdeconexopossuemumoumaisapelidos,por exemplo, para especificar o nome de usurio voc poderia utilizar o termo usernameouusurioouaindauser. Atabelaabaixolistatodososparmetrosdisponveisparausoemumastringde conexoelistatambmosapelidos disponveisparacada parmetro. Note que a partir da verso 1.2, a SQL LIB novamente inova, possibilitando passar os parmetros dentro da string de conexo utilizando a lngua portuguesa ,oquecomcertezairfacilitaremmuitoasua utilizao. Parmetro
USERNAME
Apelidos
USUARIO,NOME, UID,USER,ID, USERID,USER NAME,NAME, LOGIN SENHA,PWD, PASS,PASSWRD BASEDEDADOS, BASEDEDADOS, DADOS,BANCODE DADOS,BANCO, DADOS,DTB,DB, DATA,BASE, PATH,DBQ
PASSWORD
DATABASE
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.12
DRIVER
Nome do driver interno da SQL LIB quedevegerenciarestaconexo. Nome do computador ou IP aonde a conexodeveserestabelecida.
HOST
PORT
Nmerodaportaquedeveserutilizada para conexo. Este parmetro quando no especificado, utilizar o valor padrodorespectivodriverqueaSQL LIB ir utilizar para gerenciar a conexo.
Nota: S no sei ao certo explicar por que alguns parmetros possuem tantos apelidos, mas acreditoquenoserporfaltadeumanomenclaturaapropriadaqueaconexodeixardeser estabelecida.=D
Almdosparmetrospassadosacima,aSQLLIBaceitatambmumparmetro adicional: o nome dodriver desejado, seguidodo IP onde a conexo deve ser efetuada. Este parmetro quando usado, deve ser o primeiro a ser passado na stringdeconexo,comomostraoexemploabaixo:
cConn:=PostgreSQL=192.168.0.1usuario=postgres+ senha=postbanco=Demos SQLCONNECTcConnINTOnPostSQL <nOutPutVar>
Se a conexo for efetuada com sucesso, ela tornase a conexo ativa. Consulte a funo SQLSETCONNECT()paramaioresdetalhessobreogerenciamentodeconexesdaSQLLIB. Eisumexemplocompletoqueefetuaaconexoem2servidoresdiferentesetestaseacomunicao foibemsucedida:
#include'sqllib.ch' REQUESTSQLLIB REQUESTMySQL REQUESTPostgreSQL functionMain() cConn:="Driver=PostgreSQLServidor=192.168.0.1+ usuario=postgressenha=postbanco=Demos" SQLCONNECTcConnINTOnPostSQL /* *Houvealgumerronaconexao? */ IFSQLErrorNO()>0 Alert("Nofoipossvelconectaraobancodedados!"+ "Informeestamensagemaosuporte:"+ SQLErrorMsg()) Return(.F.) ENDIF cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=jose"
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.13
Este um recurso muito til quando se necessita determinar em tempo de execuo as configuraes do banco, do host e outrosparmetrosnecessriospara conexo, pois uma string utilizada como parmetro desdecomandoalgorelativamentesimplesepodeserarmazenadaemumarquivo.INI,emumavarivel deambienteparaserrecuperadaporGETENV()ouatmesmoemumsimplesDBF.
Consultetambm:
SQLDISCONNECT SQLSETCONNECT()
3. SQLDISCONNECT
Fecha uma conexo aberta com o comando SQL CONNECT ou pelas funes SQLCONNECT()/SQLCONNPARSE() egravaquaisquertransaesqueaindaestiverempendentes.Este comandomapeadointernamenteparachamarSQLDISCONNECT(). Sintaxes:
SQLDISCONNECT[FROM]<nHandle> SQLDISCONNECT[<ALL>]
Onde:
<nHandle> <ALL>
Consultetambm:
SQLCONNECT
4. SQLEXECUTE
Executa um comando SQL diretamente noservidore retorna. Esta funo nodeve ser utilizada
Onde:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.14
EspecificaocomandoSQLqueserexecutadonoservidor. IndicaonmerodaconexoondeocomandoSQLdeveserexecutado. um lista de argumentos utilizados para prprocessar <cSQL> utilizando o PARSERinternodaSQLLIB,antesdeenvialoaoservidor. Utilize a palavrachave WITH ARRAY caso deseja utilizar um ARRAY ao invsdeuma normaldelistadeparmetros.
A partir da verso 1.3 da SQL LIB este comando no gerar nenhuma mensagem caso, tenha ocorridoalgumerroduranteaexecuode<cSQL> juntoaoservidor.Useovalorderetornopara testar se o comando foi executado com sucesso e consulte as funes SQLErrorMsg() e SQLErrorNO()para obteramensagemeonmerodoerrorespectivamentedaltimafalha. Exemplo1(semparmetros):
cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=test" SQLCONNECTcConnINTOnMySQL SQLEXECUTEINSERTINTOCLIENTES(nome,salario)+ VALUES(JosMatias,2500.00)
Exemplo2(comlistadeparmetros):
cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=test" SQLCONNECTcConnINTOnMySQL SQLEXECUTEINSERTINTOCLIENTES(nome,salario)VALUES($1,$2) WITHJoseMatias,2500.00
Exemplo3(utilizandoparmetrosdeumarray):
cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=test" SQLCONNECTcConnINTOnMySQL SQLEXECUTEINSERTINTOCLIENTES(nome,salario)VALUES($1,$2) WITHARRAY{JoseMatias,2500.00}
Consultetambm:
USESQL SQLEXECUTE() SQLARRAY() SQLPARSER()
5. SQLTRANSLATEPATH
Especifica o tipo de converso a ser aplicada no PATH dos arquivos passados para a SQL LIB. Nomes de arquivos DBFs e de ndices esto sujeitos alteraes por esta funo para facilitar a migraodesoftwaresantigos. Sintaxes:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.15
SETTRANSLATEPATHTO<nMode> SQLTRANSLATEPATHTO<nMode>
Onde:
<nMode>
Descrioeexemplo Retorna apenas o nome do arquivo sem extenso. No comandoUSEacima,resultariaem"ESTOQUE",este ovalor padro daSQLLIB. Retornaopathdoarquivoprocessado massem extenso.NocomandoUSEacima,seriaomesmoque PROGRAMA_ARQUIVOS_DBF_ESTOQUE. Resultanonomedoarquivosempath,mascom extenso.Noexemploacima,seriaomesmoque ESTOQUE_DBF. Retornaopathdoarquivocompletoe comextenso. Noexemplodocomandouseresultariaem PROGRAMA_ARQUIVOS_DBF_ESTOQUE_DBF
tpFullPath
tpFullName
tpFullNamePath
Consultetambm:
SQLTRANSLATECASE SQLParse()
6.SQLTRANSLATECASE
Especifica o tipodeconverso a ser aplicada no NOME dos arquivospassados para a SQL LIB. Nomes de arquivos DBFs e de ndices esto sujeitos alteraes por esta funo para facilitar a migraodesoftwaresantigos. Esta funo determina o tipo de converso (no caso de maisculas ou minsculas) que deve ser aplicadaaos osnomesdearquivospassadosparacomandoscomoUSEouSETINDEX.Istoajudaa converter todo o sistema utilizandose um nico comando, para o caso de haver vrios mdulos PRGs,comcomandosutilizandonomesdearquivoscomcaixaalta,baixaoumista. Porexemplo,casooservidorsejaLINUXeosnomesdastabelasestiverememletrasmaisculas,o servidor pode gerar um erro, dizendo que determinada tabela no existe, se o nome do arquivo passadonocoincidir exatamentecomonomeexistente. Sintaxes:
SETTRANSLATECASETO<nMode> SQLTRANSLATECASETO<nMode>
Onde:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.16
<nMode>
tcUpperCase tcLowerCase
Consultetambm:
SQLTRANSLATEPATH SQLParse()
7.SQLCUSTOMINDEXES
IndicaseaSQLLIBdevepermitirounoousodendicescustomizados. Sintaxe:
SETCUSTOMINDEXES<ON,OFF> SQLCUSTOMINDEXES<ON,OFF>
Onde:
<ON> <OFF>
Permitequesejamcriadosndicescustomizadosquandonecessrio. Indicaqueapenasousodendicessimplespermitido.
OvalorpadroparaestecomandoOFF,parasemanteracompatibilidadecomversesanteriores da SQL LIB. Caso deseje utilizar ndices customizados, voc deve ativar esta opo com SET CUSTOMINDEXESON. ConsulteoapndiceAparaobtermaioresinformaesdetalhadassobrecomotrabalharcomndices naSQLLIB. Exemplo:
demos\index.prg
8.SQLPACKETSIZE
Especificaaquantidadede registrosque devemserlidosdoservidorsemprequenecessrio.Ovalor padrodaSQLLIBtrazer 50registros porvez. Sintaxe:
SQLPACKETSIZE[TO]<x>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.17
SETPACKETSIZE[TO]<x>
Onde:
<x>
A SQL LIB possui um mecanismo de paginao que puxa do servidor apenas os registros necessrios,mesmoqueatabelatenhamilharesderegistros.Istoasseguraummelhordesempenho viaredeegarantequeaquantidadedememriaRAMdisponvelnoseusistemasejasuficientepara execuodoseusoftware.
Estecomandonoafetaastabelasjseencontramabertasnosistema,nemseaplica tabelasabertas comocomandoUSESQL.ParatabelasquejforamabertascomocomandoUSEno comocomando
USESQL utilizeocomandoSQLCURRENTPACKETSIZE.
Exemplo:
SETPACKETSIZETO25 /*L25registrosporvez*/ USEc:\test\table.dbfNEWVIA'PGSQL'
Consultetambm:
SQLCURRENTPACKETSIZE SQLPACKETSIZE()
9.SQLCURRENTPACKETSIZE
AlteraoPACKETSIZE deum arquivojabertonosistema,estandoele noALIAS()atual. Sintaxe:
SQLCURRENTPACKETSIZE[TO]<x> SETCURRENTPACKETSIZE[TO]<x>
Onde:
<x>
Exemplo:
SETPACKETSIZETO25 /*L25registrosporvez*/ USEc:\test\table.dbfNEWVIA'PGSQL' SETCURRENTPACKETSIZETO50 /*Definequedeveler50porvez*/
Consultetambm:
SQLPACKETSIZE SQLPACKETSIZE()
10. SQLFULLDELETE
Determinaseumregistrodeveserrealmente deletadodatabelaouapenasmarcadopararemoo.O padro daSQLLIBparaestecomando OFF. Sintaxe:
SQLFULLDELETE<ON,OFF>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.18
Onde:
<ON>
Faz com que o registro seja realmente deletado e suas informaes sejam descartadasdobancodedados.OcomandoRECALLnopoderserutilizado
pararecuperarestesdadosposteriormente.
<OFF>
Consultetambm:
SQL_FULLDELETE()
11. SQLFILTER
Defineumfiltroparaatabelaatual,quedeverserprocessadonoladodoservidor.Ousodestetipo dendicemaisrecomendadodoqueousodeSETFILTER. Sintaxe:
SQLFILTERTO[<cSQLFilter>]
Onde:
<cSQLFilter>
aexpressoquedefinirofiltroativoparaatabelaatual.Seumastringvazia forpassadacomoparmetro,ofiltroatualserremovido.
Consultetambm:
SQLFILTER()
12. COPYTABLE
Copiaocontedodeuma tabelaexistenteparaumanovatabelaviaSQL. Sintaxe:
COPYTABLE<origem>TO<destino>
Onde:
<origem> <destino>
onomedatabelaatual,existentenoservidor. Especifica o nome da nova tabela que ser criada com base nos dados e na estruturadatabelaoriginal.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.19
Consultetambm:
RENAMETABLE DELETETABLE
13. DELETETABLE
Apagauma tabela existente no servidor SQL, eliminando todosos dados e a prpria estruturada tabela. Sintaxes:
DELETETABLE<tabela> DROP TABLE<tabela>
Onde:
<tabela>
onomedatabelaqueserremovidadoservidor.
14. DELETEINDEX
Deletaumoumaisndicesdobancodedados. Sintaxe:
DELETEINDEX<index> DROP INDEX<index>
Onde:
<index>
o nome do ndice que se deseja excluir do servidor. Voc pode utilizar um asterisco"*"comocuringaparaexcluirmaisdeumndicecomestecomando.
15. RENAMETABLE
Alteraonomedeumatabelaexistentenoservidor. Sintaxe:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.20
RENAMETABLE<tabela>TO<novo_nome>
Onde:
<tabela> <novo_nome>
onomeatualdatabelaexistentenoservidor onovonomequeserdadotabela.
Consultetambm:
RENAMEINDEX
16. RENAMEINDEX
Renomeiaum ndiceexistentenoservidorparaoutronome. Sintaxe:
RENAMEINDEX<indice>TO<novo_nome>
Onde:
<indice> <novo_nome>
onomeatualdondiceexistentenoservidor onovonomequeserdadoestendice.
Consultetambm:
RENAMETABLE
17. STARTTRANSACTION
Inicia uma nova transao em todas as conexes atualmente abertase incrementa o contador de transaesem+1.Estecomandopossuioutrosapelidosconformeexibidonasintaxeabaixo: Sintaxes:
STARTTRANSACTION BEGINTRANSACTION TRANSACTIONSTART
OcomandoSTARTTRANSACTIONiniciaumnovoblocodetransaonoservidorSQL.Todos oscomandosqueforemexecutadosdentrodestebloco,entodeverosergravadoscom COMMITou descartadoscomocomandoROLLBACK. Embora a funo SQL_TRANSCOUNT() retorne a quantidade de transaes abertas at o momento,transaesaninhadasnososuportadaspelaSQLLIB. importante mencionar neste ponto, que alguns comandos e instrues SQL no podem ser desfeitos.Istoocorreporquenosepoderefetuarum ROLLBACKdealgumasinstruesSQL.Em geral, estas incluem instrues DDL (data definition language), como aquelas que criam ou removembancodedados,ouaquelasquecriam,apagamoualteramtabelas.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.21
Voc pode desejar projetar as suas transaes para no incluir estas instrues. Se voc executar umainstruodaqualnosepodefazerROLLBACKemumatransao,eentooutrainstrues falhar posteriormente, o efeito total da transao no pode ser desfeito usando uma instruo ROLLBACK. Os seguintes comandos finalizam uma transao implicitamente (como se voc tivesse feito um COMMIT depoisdeexecutarocomando): Comando
ALTERTABLE DROPDATABASE LOADMASTERDATA SETAUTOCOMMIT=1
Comando
BEGIN DROPINDEX LOCKTABLES STARTTRANSACTION
Comando
CREATEINDEX DROPTABLE RENAMETABLE TRUNCATE
Exemplo:
SELECTTEST *EstecomandoiniciaumatransaoSQL. BEGINTRANSACTION WHILE!Eof() SELECTTESTSQL APPENDBLANK REPLACECODWITHTEST>COD REPLACENOMEWITHTEST>NOME REPLACEANIVWITHTEST>ANIV REPLACEBLOQWITHTEST>BLOQ REPLACELIMCWITHTEST>LIMC REPLACEULTCWITHTEST>ULTC REPLACEATIVWITHTEST>ATIV SELECTTEST SKIP End * *Gravaosdadoseterminaatransao. * ENDTRANSACTION
OutrosExemplos:
demos\simples.prg demos\AppendFrom.prg
Consultetambm:
ENDTRANSACTION COMMITTRANSACTION ROLLBACKTRANSACTION SQL_TRANSCOUNT()
18. ENDTRANSACTION
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.22
Finaliza um bloco de transao aberto com START TRANSACTION, envia um COMMIT das alteraespendentes(sehouver)edecrementaocontadordetransaesativasem 1. Sintaxe:
ENDTRANSACTION
19. COMMITTRANSACTION
Gravatodasasalteraesfeitasdentrodeumblocodetransaes,masnoafinaliza. Sintaxes:
COMMITTRANSACTION SQLCOMMIT
Consultetambm:
ROLLBACKTRANSACTION BEGINTRANSACTION ENDTRANSACTION
20. ROLLBACKTRANSACTION
Descartatodasasalteraesefetuadasnoblocodetransaoatualemtodasastabelasenvolvidas, masnofinalizaoblocodetransaes. Sintaxe:
ROLLBACKTRANSACTION SQLROLLBACK
21. CLEARINDEXES
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.23
Onde:
<table>
o nome da tabela cujo os ndices devem ser deletados. Caso seja omitido, todososndicesdatabelaatualserodeletados.
Quando se indexa um campo utilizandose a SQL LIB, as informaes sobre aquele ndice tais como tamanho, expresso da chave, flag indicando se ele um ndice composto e muitas outras informaessogravadasnumatabeladesistemachamadaSQL$INDEXES. Emalgunscasos,asinformaesnestatabelapodemnosermaisteiscomoporexemplo, quandovamosreindexaratabelaatual.DesdemodovocdevechamarCLEARINDEXES,para garantirquetodasasinformaesnosistemasoconsistentes. Consultetambm:
DELETEINDEX
22. SELECTSCHEMA
Informa em qual SCHEMA deve ser utilizado para procura e acesso as tabelas no servidor ou opcionalmenteinformaemqualSCHEMAestoarmazenadosastabelasdesistemadaSQLLIB. Sintaxes:
SELECTSCHEMA<cSchemaName> SELECTSYSTEMSCHEMA<cSchemaName>
Onde:
<cSchemaName>
onomedoSCHEMAquedeveserconfiguradoparapesquisanoservidor.
OsuporteSCHEMAsnocaractersticade todososservidores.Nomomentoemqueeste documentoestavasendoredigido,oMySQLnopossuaaindaestacaracterstica(versoatual 5.0.18). JcomPostgreSQLestecomandomuitotil,poismudaoSCHEMAativo.Vocpodeobtero nomedoSCHEMAatualapenaschamandoafunoSQLSCHEMA()semparmetros. Note que temos dois comandos para manipulao de SCHEMAS, a primeira sintaxa para a TABELA individualmente aberta com USE. A segunda funo utilizada pela SQL LIB para acessarastabelasdosistema,taiscomoSQL$INDEXESeoutrasquepossamsurgir. OcomandoUSESQLeafunoSQLARRAY()nosoafetadosporestafuno,poisnestescasos ocomandoSQLdeveserpassadojnoformatofinalparaexecuo. Exemplo:
cConn:="PostgreSQL=192.168.0.1usuario=postsenha=postbanco=Demos" SQLCONNECTcConnINTOnPostSQL
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.24
//Abreatabelavendas.pedidos
Consultetambm:
SQLSCHEMA() SQLSYSTEMSCHEMA()
23. USE
OcomandoUSEporpadronoClippereporextensonoHarbour/xHarbour,abreumarquivoDBF nareaatualeopcionalmenteos seundices.ComaSQLLIB estecomandomantm suasintaxe original, mas agora importante(especialmente parao Clippeiros) a ateno alguns parametros opcionaisdocomandoUSE. SuasintaxepadronoClipper5.3:
USE<(db)> [VIA<rdd>] [ALIAS<a>] [<new:NEW>] [<ex:EXCLUSIVE>] [<sh:SHARED>] [INDEX<(index1)>[,<(indexn)>]]
OpontoemdestaquequequeremosdaraquiparaoparmetroVIA.Estaclusulaidentificaparaa RTL(runtimelibrary)docompilador,sobrequalonomedoRDDquevocdesejautilizarpara gerenciarnosomenteaaberturadestearquivo,mastambmseuscomandosdeleituraegravao. Sendoassim,semprequeformosutilizaraSQLLIBparaabrirumatabelanoservidorprecisamos informar o nome do RDD valor na clausula VIA, indicando o driver que ir manipular estas informaesparans.Vejadoisexemplosabaixo:
usec:\test\table.dbfaliasTestSQLnewviaMySQL usetest.dbfaliasTestviaPGSQLnew
Nos exemplos acima, indicamos no primeiro caso que devese utilizar a SQLLIB para abrir o arquivo,utilizandoseodriverparaMySQLenosegundousamosodriverparaPostgreSQL. Neste ponto a mgica da SQL LIB comea a funcionar. O ponto de maior dificuldade e compreensoimediata paraos novos, que a SQL LIB no vaiprocurar um arquivo no seu HD chamadoc:\test\table.dbf conformeespecificadonalinhadecomando. Aoinvsdisto,aSQLLIBchecaseexisteuma conexoativaparaumservidorMySQL.Sehouver, elavaibuscarporumatabela nesteservidor.Onomedatabelapodemudarconformeosvaloresdos comandosSETTRANSLATEPATHe SQLTRANSLATECASE. Omesmoocorrecomosegundoexemplo,pormdestavez,odriverutilizadoodoPostgreSQL.A tabelaabaixolistaosnomesdosRDDsintroduzidospelaSQLLIBemostraaqualservidorsecada umseraplicam: RDD MySQL Servidor Supor tado MySQL,verso4.1.7ousuperior.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.25
PGSQL
PostgreSQLverso8.0ousuperior.
Podemos evitar o trabalho de especificar a clusula VIA seguida do nome de um RDD em cada comandoUSEqueformosexecutar.OsegredoparaistoqueseVIAforomitido,ovalorpadro paraestaclusulaonomedoRDDqueestiverdefinidoemRDDSETDEFAULT(). PorpadroodriverinicialdefinidocomoDBFNTX,mas podemosalterlo nossofavor eisum exemplocompleto ecomentado:
?'TestRDDon'+SQLVersion()+'&'+Version() /* *UtilizamosestecommandoparaseconectaraoservidorSQLviaTCP/IP */ SQLCONNECTON'localhost'//NomedaestaoouIP PORT3306//Numerodaporta DATABASE'test' USER'root' PASSWORD'' OPTIONSSQL_NO_WARNING LIB'MySQL' /* *Houvealgumerronaconexao? */ IFSQLErrorNO()>0 Alert("Nofoipossvelconectaraobancodedados!"+ "Informeestamensagemaosuporte:"+ SQLErrorMsg()) QUIT ENDIF /* *Aquiabrimosoarquivo.DBFlocal,vejaquenoespecificamos *aclausulaVIA,forandoeleaabriropadro. */ USEtest.dbfALIASTestNEW Struct:=dbStruct() CLOSEALL /* *Ocomandoaseguir,dizquetodososarquivosabertoscom *USE,COPYouqualquercomandodemanipulaodedados,deve *usarodriverparaMySQLdaSQLLIB: */ rddSetDefault(mysql) /* *AgoravamosCRIARumatabelanoservidorMySQLcomamesma *estruturadoarquivo.DBFlocal: */ dbCreate('test_table.dbf',Struct) /* *AbreoarquivoremotamenteviaMySQL,poisagoraopadroparaVIA *senoespecificadoMySQL. */ USEtest_tableALIASTestSQLNEW /* *Agoraabrimosoaquivo.DBFlocalmenteeprecisamosabrilocomo *DBFexplicitamente,poismudamosovalordeRDDSETDEFAULT() */ USEtest.dbfALIASTestNEWVIADBFNTX//ouDBFCDXsepreferir ...
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.26
24. USESQL/USEAS
ExecutaumcomandoSQLnoservidoreobtmoresultadodaconsultaabrindoocomoumtabela somenteparaleitura. Sintaxerecomendada :
USESQL<(SQL)> [VIA<rdd>] [ALIAS<a>] [INTO<conn>] [NEW] [EXCLUSIVE] [SHARED] [READONLY]
Sintaxealternativa:
USE<(db)> AS<SQL> [INTO<conn>] [VIA<rdd>] [ALIAS<a>] [NEW] [SHARED] [EXCLUSIVE] [READONLY] [C1LOGICAL] [OVERWRITE] [RECISION<p>] [SCROLLABLE] [PERMANENT]
ocomandoSQLaserexecutadonoservidor o numero da conexo especfica para utilizada para enviar o comando SQL paraoservidor onomedoRDDqueiroretornodestecomandoSQL.Consulteocomando USEparaobterumatabelacomtodososnomesdeRDDsdisponveis.
<rdd>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.27
Notaimportante:Desdeaverso1.4da SQLLIBRDD,ascolunasSQL_ROWIDe SQL_DELETEDsetornamvisveisdentroeumUSESQLouSQLARRAY()edeste modopodemserconsultadascomoqualqueroutrocamponormaldatabela. ElediferedocomandoSQLEXECUTEpois pode processar osvaloresderetornodocomandoSQL ediferentementedeSQLARRAY(),estecomando abre oresultadodocomandocomoumALIAS() vlido. Exemplo:
cSQL:="showfullcolumnsfromtest_table" *Abreocomandoepuxaosdadoscomosomenteleitura USESQL(cSQL)ALIASTempVIAMySQL /* *ExibimososdadosdoresultadoatualizadosnumDBEDIT */ cls SETCOLORTOW+/B @5,02to24,77doub DBEdit(6,3,23,76)
Consultetambm:
DEMOS\USE_SQL1.PRG DEMOS\USE_SQL2.PRG SQLARRAY()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.28
IVFUNES
ASQLLIB compostaporumagrande variedadedefunes,querealizamdiversastarefastantodo lado do servidor SQL, como no lado do cliente. Esta seo ir descrever as funes disponveis e algumas funes interessantes da API de baixo nvel da SQL LIB, lembrando que as constantes utilizadasporestasfunesestolistadasnoarquivoSQLLIB.CHqueacompanhaainstalao.
1. SQLPARSESTYLE()
RetornaeopcionalmentealteraotipodeconversoaseraplicadanoPATHdosarquivospassados para a SQL LIB. O comando SQL TRANSLATE PATH mapeado internamente como uma chamadaestafuno. Sintaxe:
SQLParseStyle([<nStyle>])>nOldStyle
Onde:
<nStyle>
oparmetroopcional que identifica o novo estilo a ser aplicado nas futuras conversesefetuadaspelaSQLLIB. ovaloratualdeSQLPARSESTYLE()
<nOldStyle>
Consultetambm:
SQLTRANSLATEPATH
2. SQLPARSECASE()
Retorna e opcionalmente altera o tipo de converso a ser aplicada aos NOMES dos arquivos passados para a SQL LIB. O comando SQLTRANSLATE CASE mapeado internamente como umachamadaestafuno. Sintaxe:
SQLParseCase(nStyle)>nOldStyle
Onde:
<nStyle>
oparmetroopcional que identifica o novo estilo a ser aplicado nas futuras conversesefetuadaspelaSQLLIB. ovaloratualdeSQLPARSECASE()
<nOldStyle>
Paraobterumalistacompletadosvalorespara<nStyle>eumaexplicaomaisdetalhada,verifique arefernciaaocomandoSQLTRANSLATECASEnesteguia.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.29
Exemplo:
SQLParseCase(tcLowerCase)
Consultetambm:
SQLTRANSLATECASE
3. SQLPARSE()
Converteonomedearquivopassadocomoargumento,aplicandoasconfiguraesdefinidaspelas funesSQLPARSESTYLEeSQLPARSECASE. Sintaxe:
SQLParse(<cFileName>,[<nStyle>])>cResult
Onde:
<cFileName> <nStyle>
<cResult>
Exemplo:
#include'sqllib.ch' arq=C:\PROGRAMA\NETPLUS\DBF\NETEST.DBF /* *PoderamosutilizarocomandoSQLTRANSLATEPATH/CASE,masvamos *passarosegundoparmetroparailustrarcomofunciona. */ ?SQLPARSE(arq,tpFileName )//=>NETEST(padrodaSQLLIB) ?SQLPARSE(arq,tpFullName)//=>NETEST_DBF ?SQLPARSE(arq,tpFullPath)//=>PROGRAMA_NETPLUS_DBF_NETEST ?SQLPARSE(arq,tpFullNamePath)//=>PROGRAMA_NETPLUS_DBF_NETEST_DBF quit
Consultetambm:
SQLPARSESTYLE() SQLPARSECASE()
4. SQLCONNECT()
EstabilizaumaconexoumservidorSQL suportadopelaSQLLIBeretornaonmerodaconexo sebemsucedidoouzeroemcasodeerro. Sintaxe:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.30
SQLConnect(<cHost>,[<cPort>],[<cDb>],[<cUser>], <cPwd>,[<nFlags>],<cRddName>)>nHandle
Onde:
<cHost> <cPort>
onomedocomputadorouIPaoqualdeveserestabelecidaaconexo. Nmerodaportaparacomunicaocom oservidor,esteparmetroopcionale senoforespecificadoopadrodobancoserassumido. o nomedo Database aoqual devemos nos conectar. Alguns drivers comoo MySQL suportam que este parmetro seja omitido, j para PostgreSQL obrigatrio. Nomedousurioparaautenticao. Senhadousurioparaautenticao. umvaloropcionalquepodealteraromododecomportamentodaconexoem casodeerro. Identificaonomedodriverquevocdesejautilizarparaefetuarestaconexo. onumerodohandledestaconexosebemsucedidoouzeroindicandoerro.
<cDb>
<cRddName> <nHandle>
Para uma lista completa de valores para o parmetro <nFlags> e tambm para <cRddName>, consulteocomando SQLCONNECTON neste guia.Seaconexoforestabelecidacomsucesso, estasetornaraconexoativa. Exemplo:
#include'sqllib.ch' SQLConnect(localhost,3306,test,root,, SQL_NO_WARNING,MySQL) /* *Houvealgumerronaconexao? */ IFSQLErrorNO()>0 Alert("Nofoipossvelconectaraobancodedados!"+ "Informeestamensagemaosuporte:"+ SQLErrorMsg()) Return(.F.) ENDIF
Consultetambm:
SQLCONNECTON SQLSETCONNECT()
5. SQLCONNPARSE()
Estabilizauma conexo um servidor SQLutilizando os parmetros passados por umastringde conexoeretornaum nmeromaiorquezerosebemsucedidoouzeroemcasodeerro. Sintaxe:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.31
SQLConnParse(<cConnString>)>nHandle
Onde:
<cConnString>
Representa a string de conexo contendo os parmetros necessrios para conectarse ao servidor, bem como o nome do prprio driver RDD utilizado paragerenciarestaconexo. onumerodestaconexosebemsucedidoouzeroindicandoerro.
<nHandle>
Estafunonogeranenhumerrooumensagemdealertaemcasodefalha,seacomunicaofor estabelecida com sucesso ela se tornar a conexo ativa. Consulte SQLERRORNO() ou SQLERRORMSG() para obter detalhes sobre o ltimo erro ocorrido e tambm a funo SQLSETCONNECT()paramaioresdetalhessobreogerenciamentodeconexesdaSQLLIB. Paraumaconsideraodetalhadasobrequaisparmetrossopermitidosdentrode<cConnString>, consulte a explanao pormenorizada do comando SQL CONNECT (com Strings de Conexo) nesteguia. Exemplo:
cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=jose" nConn:=SQLConnParse(cConn) /* *Houvealgumerronaconexao? */ IFSQLErrorNO()>0 Alert("Nofoipossvelconectaraobancodedados!"+ "Informeestamensagemaosuporte:"+ SQLErrorMsg()) Return(.F.) ENDIF
Consultetambm:
SQLCONNECT(comStringsdeConexo) SQLSETCONNECT()
6. SQLDISCONNECT()
Fecha uma conexo aberta com o comando SQL CONNECT ou pelas funes SQLCONNECT() e SQLCONNPARSE() e grava quaisquer transaes que ainda estiverem pendentes. O comando SQL DISCONNECTmapeadoparaestafuno. Sintaxes:
SQLDisconnect([<nHandle>]) >lSuccess SQLDisconnect([<lAll>]) >lSuccess
Onde:
<nHandle>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.32
<lAll>
Se um valor lgico for passado como parmetro, SQLDISCONNECT fechar todasasconexesabertasse<lAll>forverdadeira. um valor lgico, indicando se a conexo ou conexes foram fechadas com sucesso.
lSuccess
No necessrio finalizar todas as conexes por ocasio da sada do seu aplicativo. A SQL LIB finalizaautomaticamenteeenviaumCOMMITtodasasconexesabertas. Exemplo:
Closeall SQLDisconnect(.T.) quit
Consultetambm:
SQLCONNECT()
7. SQLGETCONNECTION()
RetornaoHANDLEdaconexoatualemusopelaSQLLIBoupesquisaporumaconexovlida para o RDD solicitado. Esta funo possui outros nomes como SQLGETCONNECT() e SQLGETCONN(). Sintaxe:
SQLGETCONNECTION([<cRddName>])>nHandle
Onde:
<cRddName>
uma string que identifica o nome do RDD a ser pesquisado na tabela de conexes. onmerodaconexoouzerosenadasemelhanteforencontrado.
nHandle
Se <cRddName> foromitido, esta funo retorna o nmerodaconexo atualmente em uso.Caso contrrio,elapesquisadentrodetodasasconexesjestabelecidaseregistradasinternamentepela SQLLIB,procurandoa primeiraconexobemsucedidaparaodriversolicitado. Exemplo:
#include'sqllib.ch' cConn:="Driver=PostgreSQLServidor=192.168.0.1+ "usuario=postgressenha=postbanco=Demosporta=5432" SQLCONNECTcConnINTOnPostSQL cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=jose" SQLCONNECTcConnINTOnMySQL /* *OcomandoSQLCONNECT,efetuaumaconexoeregistraacomoativa. *Sendoassim,ocomandoabaixoretornarovalordenMySQL: */
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.33
Consultetambm:
SQLSETCONNECTION() SQLGETCONNECTIONS()
8. SQLSETCONNECTION()
AlteraonmerodaconexoatualmenteemusopelaSQLLIB.Estafunopossuioutrosnomes comoSQLSETCONNECT()e SQLSETCONN(). Sintaxe:
SQLSETCONNECTION(<nHandle>)>lSuccess
Onde:
<nHandle> lSuccess
Exemplo:
/* *Nesteexemploiremosestabelecerduasconexesedemonstrarouso *dafunoSQLSETCONNECTION(): */ cConn:="Driver=PostgreSQLServidor=192.168.0.1"+ "usuario=postgressenha=postbanco=Demosporta=5432" SQLCONNECTcConnINTOnPostSQL cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=jose" SQLCONNECTcConnINTOnMySQL /* *Abrimosoarquivoutilizandoaconexoatual(quefoiaultima *serefetuadanestecaso) */ USEestoqueNEWVIAMySQL /* *AgorairemosselecionaraconexodoPostgreSQLeabriruma *tabelanestaconexo. */ SQLSETCONNECTION(nPostSQL) USEclientesNEWVIAPGSQL ....
Consultetambm:
SQLGETCONNECTION()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.34
9. SQLGETCONNECTIONS()
RetornaumARRAYcontendoinformaessobre todasasconexesativasregistradaspelaSQL LIB. Sintaxe:
SQLGetConnections()>aResult
Onde:
<aResult>
OarquivoSQLLIB.CHdefineasseguintesconstantesparaoarrayretornadoporestafuno: Constante
SQL_CONN_HANDLE SQL_CONN_RDD SQL_CONN_HOST SQL_CONN_PORT SQL_CONN_DB SQL_CONN_USER SQL_CONN_PASSWORD SQL_CONN_FLAGS SQL_CONN_SYSTEMID
Descrio Identificaohandledaconexo NomedoRDDquegerenciaestaconexo Nomedohostaoqualestaconexoestconectada Nmerodaportautilizadaparacomunicao NomedoDatabase originalmenteconectado Nomedousurioutilizadoparaautenticao Senhausadaparaautenticaraconexo Flagsopcionaisutilizadosparaestabeleceraconexo umvalornumricointernodaSQLLIBqueidentificaoSYSTEM IDdodriverutilizadoparagerenciarestaconexo.
Exemplo:
#include'sqllib.ch' aList:=SQLGetConnections() FORI:=1TOLen(aList) Conn:=aList[i] ?Usurio,Conn[SQL_CONN_USER],conectadoem, Conn[SQL_CONN_HOST],via,Conn[SQL_CONN_RDD], naconexo,Conn[SQL_CONN_HANDLE] End
Consultetambm:
SQLGETCONNECTIONINFO()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.35
10. SQLGETCONNECTIONINFO()
Retornaumarraycontendoinformaessobreaconexopassadacomoargumento. Sintaxes:
SQLGetConnectionInfo([<nConnect>])>aInfo SQLGetConnectionInfo(<cRddName>) >aInfo
Onde:
<nConnect>
onmerodaconexoquesedesejaobterinformaes.Seesteargumentofor omitidoaconexoativaserassumida. Se o argumento passado como parmetro for uma expresso caracter, <cRddName>deveconteronomedodriverRDDespecficoparapesquisa. Nestecasoaprimeiraconexobemsucedida,quepossuaoRDDsolicitadoser processada.
<cRddName>
aInfo
EstearrayderetornopossuiamesmaestruturaindividualdeSQLGETCONNECTIONS(). Exemplo:
#include'sqllib.ch' Conn:=SQLGetConnectionInfo(nConn) ?Usurio,Conn[SQL_CONN_USER],conectadoem, Conn[SQL_CONN_HOST],via,Conn[SQL_CONN_RDD], naconexo,Conn[SQL_CONN_HANDLE]
Consultetambm:
SQLGETCONNECTIONS()
11. SQLGETRDDNAME()
RecebecomoparmetroonumerodaconexoeretornaonomedodriverinternodaSQLLIBque estgerenciandoestaconexo. Sintaxe:
SQLGetRddName([<nConnect>])>cRddName
Onde:
<nConnect>
<cRddName>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.36
12. SQLERRORMSG()
Retornaumastringrepresentandoaltimamensagemdeerro obtida(sehouver) duranteuma operaointernadaSQLLIB. Sintaxe:
SQLErrorMsg()>cMsg
Onde:
<cMsg>
Representaastringcontendoaltimamensagemdeerrogerada.
13. SQLERRORNO()
Retornaonmerodoltimoerro(sehouver)duranteumaoperaointernadaSQLLIB. Sintaxe:
SQLErrorNo()>nError
Onde:
<nError>
onmerodoltimoerroocorridoouzeroemcasodesucesso.
Exemplo:
cConn:="Driver=PostgreSQLServidor=192.168.0.1"+ "usuario=postgressenha=postbanco=Demosporta=5432" SQLCONNECTcConnINTOnPostSQL /* *Houvealgumerronaconexao? */ IFSQL_ErrorNO()>0 Alert("Nofoipossvelconectaraobancodedados!"+ "Informeestamensagemaosuporte:"+ SQL_ErrorMsg()) Return(.F.) ENDIF
Consultetambm:
SQLErrorMsg()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.37
14. SQLPACKETSIZE()
Especifica a quantidade de registros que devem ser lidos do servidor sempre que necessrio. O comandoSQLPACKETSIZEeSQLCURRENTPACKETSIZEsomapeadosinternamentepara chamarestafuno. Sintaxe:
SQLPacketSize([<nSize>],[<lCurrentAlias)>nOldSize
Onde:
<nSize> <lCurrentAlias>
onovovalorindicandoquantosregistrosdevemserlidos. umvalorlgicoindicandose<nSize>aplicaseapenasatabelaatual.
Consultetambm:
SQLPACKETSIZE
15. SQLEXECUTE()
ExecutaumcomandoSQLdiretamente noservidoreretorna verdadeirooufalsoindicandoxito. Outrosapelidos queestafunopossui:SQLEXEC()eSQLLIB_EXECSQL(). Sintaxe:
SQLExecute(<cSQL>,[<aParms>],[<nConnection>])>lResult
Onde:
<cSQL> <aParms>
astringcontendoocomandoSQLaserexecutado. umarraycomumalistadeargumentosutilizadosparaprprocessar<cSQL> utilizandooPARSERinternodaSQLLIB,antesdeenvialoaoservidor. IndicaonmerodaconexoondeocomandoSQLdeveserexecutado. um valor de retorno lgico indicando verdadeiroou falso se o comando foi executadocomsucesso.
<nConnection> lResult
Estafunonodeveserutilizadaparaenviarcomandosqueretornemdadosdoservidor,taiscomo o comando SELECT ou SHOW. Nestes casos, utilize o comando USE SQL ou ainda a funo SQLARRAY()queso prpriasparaestafinalidade. Apartirdaverso1.3daSQLLIBestafunonogerarnenhumamensagemcaso,tenhaocorrido algum erro durante a execuo de <cSQL> no servidor. Use o valorde retorno para testar se o comandofoiexecutado comsucessoeconsulteasfunesSQLErrorMsg() e SQLErrorNO() para obteramensagemeonmerodoerrorespectivamentedaltimafalha. Exemplo:
SETDATETOBRIT
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.38
Consultetambm:
SQLARRAY() SQLPARSER() USESQL ApndiceCTrabalhandocomoPARSERSQLinternodaSQLLIB
16. SQLARRAY()
Envia um comando SQL direto ao servidor e obtm o valor de retorno armazenandoo em um ARRAY. Esta funo s deve ser utilizada com comandos SQL que retornem dados, tais como SELECT,SHOW,EXPLAINentreoutros. Sintaxe:
SQLArray(<cSQL>,[<aParms>],[<nConn>], [< aFieldNames>],[<nSystemID>])>aResult
Onde:
<cSQL> <aParms>
EspecificaocomandoSQLqueserexecutadonoservidor. um lista de argumentos opcionais utilizados para prprocessar <cSQL> utilizando o PARSER interno da SQL LIB, antes de enviar o comando ao servidor. IndicaonmerodaconexoondeocomandoSQLdeveserexecutado. um array opcional que se especificado, ser preenchido com os nomes dos camposretornadosnaconsultaefetuada. Porexemplo,emumcomandoSELECTNOME,FONEFROMCLIENTES, estearrayconteriadoisvalores:{NOME,FONE}
<nConn> <aFieldNames>
<nSystemID>
um valor numrico interno da SQL LIB que identifica o SYSTEM ID do driverutilizadoparagerenciarestaconexo. Especificar este parmetro acelera a execuo do comando SQL quando h muitas conexes efetuadas ao mesmo tempo, pois a SQL LIB no necessita pesquisarinternamenteparaaveriguarqualodrivercorretoparagerenciaresta conexo,vistoqueoesteparmetroserveparaobtermosestainformao.
aResult
o array multidimensional que contm os valores de retorno do comando executadonosistema. Para cada registro (ou tuples) retornados pela consulta ser criado um item correspondente em aResult e para cada campo retornado ser criado um item dentrodestalinha.DemodoqueaResultserdeclaradocomo:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.39
DECLAREaResult[numero_de_linhas][numero_de_colunas]
Exemplo1(MySQL):
/* *ListatodasastabelascadastradasnoservidorMySQL */ tabelas:=SQLArray(SHOWTABLES) ?ToString(tabelas)
Consultetambm:
SQLEXECUTE() SQLPARSER() USESQL ApndiceCTrabalhandocomoPARSERSQLinternodaSQLLIB
17. SQLARRAYASSOC()
Envia um comando SQL direto ao servidor e obtm o valor de retorno armazenandoo em um ARRAY associativo. Esta funo semelhante SQLARRAY() e segue as suas mesmas regras, diferenciandose apenas no vetor de retorno que possui associao com os campos das tabelas (sempreemletrasminsculas). Sintaxe:
SQLArrayAssoc(<cSQL>,[<aParms>],[<nConn>], [< aFieldNames>],[<nSystemID>])>aResult
Onde:
<cSQL> <aParms>
EspecificaocomandoSQLqueserexecutadonoservidor. um lista de argumentos opcionais utilizados para prprocessar <cSQL> utilizando o PARSER interno da SQL LIB, antes de enviar o comando ao servidor. IndicaonmerodaconexoondeocomandoSQLdeveserexecutado. um array opcional que se especificado, ser preenchido com os nomes dos camposretornadosnaconsultaefetuada. Porexemplo,emumcomandoSELECTNOME,FONEFROMCLIENTES,
<nConn> <aFieldNames>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.40
estearrayconteriadoisvalores:{NOME,FONE}
<nSystemID>
um valor numrico interno da SQL LIB que identifica o SYSTEM ID do driverutilizadoparagerenciarestaconexo. Especificar este parmetro acelera a execuo do comando SQL quando h muitas conexes efetuadas ao mesmo tempo, pois a SQL LIB no necessita pesquisarinternamenteparaaveriguarqualodrivercorretoparagerenciaresta conexo,vistoqueoesteparmetroserveparaobtermosestainformao.
aResult
o array multidimensional que contm os valores de retorno do comando executadonosistema. Para cada registro (ou tuples) retornados pela consulta ser criado um item correspondente em aResult e para cada campo retornado ser criado um item dentrodestalinha.DemodoqueaResultserdeclaradocomo:
DECLAREaResult[numero_de_linhas][numero_de_colunas]
Exemplo:
/* *TestaseatabelaCLIENTESexistircdigoemPostgreSQL: */ result:=SQLArrayAssoc("SELECT*fromUSERSorderbyNAME") forn:=1tolen(result) /* *Exibenatelaovalordocamponamede *todososregistrosdevolvidos */ ?result[n]['name'] next
Consultetambm:
SQLARRAY() SQLEXECUTE() SQLPARSER() USESQL ApndiceCTrabalhandocomoPARSERSQLinternodaSQLLIB
18. SQLNULLDATE()
Retornaumastringrepresentandoumadataembrancoounula. Sintaxe:
SQLNullDate([<nSystemID>])>cData
Onde:
<nSystemID>
o nmero identificadordo driver (tambm conhecido comoSystem ID) que deveserutilizadoparadeterminarqual ovalorcorretoderetorno. Caso este parmetro seja omitido, a SQL LIB determinar o valor padro de nSystemIDverificandoaconexoatual.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.41
cData
astring representandoumadatavaziaounula.
Utilizeestafunoaoefetuarpesquisasdiretonoservidor,demodoamanterseusoftwareportvel entreosdiversosdriverssuportadospelaSQLLIBistoapenasnecessriocasovocnoesteja utilizandonenhumdosparsersinternosdaRDD. EmalgunsservidoresSQLcomooPostgreSQL,camposcomvaloresNULLnosoarmazenados emndicesforandocomqueumapesquisatalcomoSELECT*FROMDATEISNULLrealize um tablescan oquecomcertezasacrificariaseuaplicativoeobanco. Por isto a SQL LIB trabalha com esta funo para determinar qual a expresso correta a ser utilizadanestescasos. Exemplo:
?SQLNullDate(POSTGRESQL_ID) ?SQLNullDate(MYSQL_ID) //Retornar:00010101
/*Utilizandoparamontarumfiltronoservidor*/ SQLFILTER(aniversario=+SQLNullDate())
Consultetambm:
SQLNULL()
19. SQLNULL()
Retornaaexpressocaracterutilizadaparagravaoemcamposstring,quandonenhumvalorfor especificado,evitandoquevaloresNULLsejamgravadosnatabela. Sintaxe:
SQLNULL()>cChar
Onde:
<cChar>
ocaracterformatadoparastring,representandoovalordeNULL.
Exemplo:
/*Filtrarosclientesqueestejamsemtelefone*/ SQLFILTERTOfone=+SQLNull())
Consultetambm:
SQLNULLDATE()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.42
20. SQLFILTER()
Retornaeopcionalmentedefineumfiltroparaseraplicadonoladodoservidor paraatabelaatual. A expresso passada por argumento deve ser formatada como um filtro SQL. O comando SQL FILTERmapeadointernamenteparaexecutarestafuno. Sintaxe:
SQLFilter([<cFilter>])>cCurrentFilter
Onde:
<cFilter>
a expresso que dever ser aplicada como filtro no ALIAS() atual. Se uma string vazia for passada como argumento, o filtro atualmente definido para estatabelaserremovido. ofiltroatualmenteemuso.
cCurrentFilter
O uso deste comando altamente recomendado como substituto de SET FILTER e SET RELATION sempre que possvel, por ser aplicado diretamente no servidor o que torna o seu processamentomaisrpido. Exemplo:
/* *FiltratodososclientesquecontenhamapalavraJOAOemqualquer *posioemseunomesejanoinicio,meiooufim */ USEclientesNEWALIAScliVIAmysql SQLFILTER(nomeLIKE%JOAO%) GOTOP BROWSE()
21. SQLREFRESH()
Atualizaosdadosdatabelaatual,forandoumsincronismoda cacheatualcomosdadosdo servidor SQL. Sintaxe:
SQLRefresh()>nil
Esta rotina atualiza os dados da tabela atual dando um GOTO para o mesmo registro onde est atualmente posicionadooponteiro de registros. Caso esta funo seja chamadasobreum registro deletadocom FULLDELETE()estandoativo,atabelaatual irretornarum EOF(). Exemplo:
USEpedidosNEWVIAmysql /* *Deletatodososregistrosdatabelaeatualizao *osdadosdamemoria */ SQLEXECUTEDELETEFROMPEDIDOS
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.43
SQLRefresh()
Consultetambm:
FULLDELETE()
22. SQL_AFFECTEDROWS()
RetornaonmerodelinhasafetadaspeloltimocomandoSQL. Sintaxe:
SQL_AffectedRows()>nRowCount
Onde:
<nRowCount>
Exemplo:
SQLEXECUTEDELETEFROMpedidos ALERT(ntrim(SQL_AffectedRows())+linhasforamexcludas)
23. SQL_FULLDELETE()
Especifica se um registro deve ser excludo definitivamente da tabela ou apenas marcado para remoofuturacomocomandoPACK.OcomandoSQLFULLDELETEmapeadointernamente parachamarestafuno. Sintaxe:
SQL_FullDelete([<lDelete>])>lOldValue
Onde:
<lDelete>
Se verdadeiro o registro atual ser definitivamente deletado da tabela caso contrrio,serapenasmarcadopararemoofuturacomocomandoPACK. ovaloratual destafuno.
lOldValue
Um aplicativo possui uma tabela de clientes e outra de pedidos, que vinculada aos clientes.Estemesmoaplicativo,podedeixarparaousurioaopodeseEXCLUIR umitemdocadastrodeclienteseestecomando,efetuariaumDBDELETE()noregistro selecionadodestatabela.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.44
Utilizando esta linha de raciocnio acima, nunca haveria em sua base de dados nenhum pedido efetuadoparaalgumclienteexcludo(registrorfo)esendoassim, vocsempretersuabasede dadosconsistente.
Consultetambm:
SQLFULLDELETE
24. SQLCREATEFLAGS ()
DefineparmetrosadicionaisqueseroanexadosfunoDBCreate()antesdeseremenviados para o servidor SQL. Esta funo deve ser usada para se alterar algum parmetro da tabela, que normalmente no est disponvel pelos parmetros de DBCreate(), como por exemplo, o seu TABLETYPEouROW_FORMAT. Sintaxe:
SQLCreateFlags([<cFlags>],[<nSystemID>])>cCurrentFlags
Onde:
<cFlags>
a string contendouma ou mais opes que sero enviadas ao servidor SQL juntamentecomocomandoDDLnomomentodecriaodatabela. um valor numrico interno da SQL LIB que identifica o SYSTEM ID do driverutilizadoparagerenciarestaconexo. Este parmetro importante, pois ele determina que <cFlags> seja aplicado APENASconexesqueutilizemestedriver. Istosignificaque,casosuaaplicaoutilizeaomesmotempoumaconexocom MySQL e outra com PostgreSQL, voc podepor exemplo, mudar os flags de DBCreate()apenasparaasconexesqueusamsomenteMySQL.Destemodo, cadabancoSQLtersuaprpriaconfiguraogerenciadapelaSQLLIBRDD individualmente. Se este parmetro for omitido ser substitudo pelo SYSTEM ID da conexo atual.
<nSystemID>
cCurrentFlags
ovaloratualmenteemvigorparao<nSystemID> especificado.
ExemplodecomocriartabelascomestruturaspersonalizadascomaSQLLIB:
LOCALaStru:={{'nome','c',25,0},{'aniv','d',10,0}} LOCALcFlag /* *Criaumatabelanormalmentesemalterarnada. *Seuformatoser InnoDB(comsuportetransaes) */ DBCREATE('test1',aStru) /* *AlteramosumparmetroeforamoseleacriaratabelacomoMyISAM *esteformatonosuportatransaes. *
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.45
*Observequenoexemploabaixo,ovaloratualemvigorparaaconexo *salvonavariavelcFlagedepoisrestaurado. */ cFlag:=SQLCreateFlags('ENGINE=MyISAM') DBCREATE('test2',aStru) SQLCreateFlags("ENGINE=MyISAMDEFAULTCHARSET=latin1"+ "PACK_KEYS=1ROW_FORMAT=COMPRESSED") DBCREATE('test3',aStru) SQLCreateFlags(cFlag) /* *Afunoabaixo,ircriaratabelatest4comomesmoformatodetest1 *Poisnoexemploacima,RESTAURAMOSovalordeSQLCreateFlags()aoseu *padrologodepoisdecriarmostest3. */ DBCREATE('test4',aStru)
Consultetambm:
DBCREATE()
25. DBCREATE()
CriaumarquivodedadosnoformatoDBFouumatabelanoservidorSQLcomaSQLLIB. Sintaxe:
DBCreate(<cNomeArquivo>,[<aEstrutura>])>NIL
Onde:
<cNomeArquivo>
onomedoarquivo.DBFouonomedatabelaSQLquesercriadacontendoa estruturadesejada. Aprimeiracolunadeveconteronomedocampo,asegundaotipo,aterceira,o tamanhodocampoeaquarta,onmerodecasasdecimais.Osdadosfornecidos devemseguirasregrasusadaspelocomandoCreatedoDBU.Informesempre asquatrocolunas,ouseja,acolunaDecimalsdeveserespecificadacom0(zero) paracamposnonumricos um array contendo a estrutura da nova tabela ou arquivo .DBF que ser criado. Quando se trabalha com Clipper, estearray deve ter no mnimoquatro colunas quando se deseja criar um arquivo DBF, sendo que cada linha correspondeaumcampoasercriado. No entanto, quando se trabalha com a SQL LIB RDD este array pode conter mais informaes, indicando outras caractersticas que se deseja agregar aos camposdanovatabela. A listagem que se segue abaixo, destaca as posies que este array poder possui,bemcomoosignificadodecadavalor: Posio 1 Refer ncia Nomedocamposercriado(semespaos)
<aEstrutura>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.46
Voctambmpodercriarcamposemumatabelacom tipodedadosespecficosdoseubancodedados.Para especificarexplicitamenteoformatoemSQLparaum determinado campo, de modo que a SQL LIB possa interpretar isto de modo correto, o dcimo valor do itemquedefineocampousadoparaindicarseotipo docampo nativo doservidor SQL. 3 4 5 Tamanhodocampoembytes. Nmerodecasasdecimais. Umflag,indicandocomvalorverdadeiroseestecampo devesercriadocomo NOTNULL. Valorlgico,indicandoseocampopossuirounooflag UNIQUE. Valorlgico,indicandoseocampopossuirounooflag AUTOINCREMENT. Valorlgico,indicandoseocampopossuirounooflag PRIMARYKEY IndicaaexpressoDEFAULTparaocampo,casoo usurionoapreencha. Valorlgico,indicandoseotipodestecampoumtipo nativo doservidorSQL.
10
Exemplo1(criandoumatabelaemSQLcomalgunsparametrosadicionais):
aStru:={} *CampoNOTNULL AAdd(aStru,{"key","n",10,0,.t.}) *PRIMARYKEYeAUTOINCREMENTO AAdd(aStru,{"codigo","n",10,0,,,.t.,.t.}) *Nomeumcampocaracternormal AAdd(aStru,{"nome","c",25,0}) *campocaracternormal AAdd(aStru,{"endereco","c",40,0}) *NOTNULLeUNIQUE
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.47
Consultetambm:
SQLCREATEFLAGS()
26. TABLE()
Testaseumaoumaistabelasexistemnoservidor. Sintaxe:
Table(<cMask>,[<nConnection>])>lFound
Onde:
<cMask>
astringcontendoonomeouamscaradastabelasqueseropesquisadasno servidorSQL. Utilize o asterisco * como caracter curinga para pesquisar por mais de uma tabela.
<nConnection>
onmerodaconexocomoservidorutilizadaparaextrairainformao.Se este parmetro for omitido ser substitudo por um valor padro, segundo o algoritmoabaixo: Sehouveralgumarquivoabertonareaatualeseeleforumatabelaaberta
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.48
comaSQLLIB,utilizeeconexodestatabela . Casocontrrioaconexoatualserassumida.
lFound
Exemplo1(checandoseumatabelaexiste):
ifTable(clientes.dbf) ?tabeladeclientesjexiste! else dbCreate(clientes.dbf,aEstrutura) endif
Exemplo2(checandosevriastabelasexistem):
if!Table(NET*.dbf) ?tabelasdosistemanoforamencontradas endif
Consultetambm:
SQLGETTABLES() INDEX() TAG()
27. INDEX()
Checaseum oumaisndicesexistemnoservidorSQL.Estafunoconsideraapenas osndices criadoscomocomandoINDEXONouDBCREATEINDEX(). Sintaxe:
Index(<cMask>,[<nConnection>])>lFound
Onde:
<cMask>
astringcontendoonomeouamscaradosndicesqueseropesquisadosno servidorSQL. Utilize o asterisco * como caracter curinga para pesquisar por mais de uma tabela.
<nConnection>
onmerodaconexocomoservidorutilizadaparaextrairainformao.Se este parmetro for omitido ser substitudo por um valor padro, segundo o algoritmoabaixo: Sehouveralgumarquivoabertonareaatualeseeleforumatabelaaberta comaSQLLIB,utilizeeconexodestatabela . Casocontrrioaconexoatualserassumida.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.49
lFound
Exemplo:
USEclientesNEWVIAPGSQL IF!index(nome.ntx) ?indexandotabeladeclientes. INDEXONnomeTOnome.ntx Else SETINDEXTOnome End
Consultetambm:
SQLGETINDEXES() TAG() TABLE()
28. TAG()
Checa a existncia de uma tag especfica dentro deum ndice criado pela SQL LIB. Esta funo considera apenas osndicescriadoscomocomandoINDEXONouDBCREATEINDEX(). Sintaxe:
Tag(<cTag>,<cIndex>,[<nConnection>])>lFound
Onde:
<cTag> <cIndex> <nConnection>
onomedatagquesedesejapesquisarnondice. onomedondice quecontmatagprocurada. onmerodaconexocomoservidorutilizadaparaextrairainformao.Se este parmetro for omitido ser substitudo por um valor padro, segundo o algoritmoabaixo: Sehouveralgumarquivoabertonareaatualeseeleforumatabelaaberta comaSQLLIB,utilizeeconexodestatabela . Casocontrrioaconexoatualserassumida.
lFound
umvalorlgicoindicandose <cTag>existeem<cIndex>.
Exemplo:
USEclientesNEWVIAPGSQL CLEARINDEXES INDEXONnome INDEXONendereco TAGnome TOclientes.cdx TAGende TOclientes.cdx
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.50
Consultetambm:
SQLGETINDEXES() INDEX() TABLE()
29. DATABASE()
ChecaaexistnciadeumDATABASEjuntoaoservidorSQL. Sintaxe:
DataBase(<cDB>,[<nConnection>])>lFound
Onde:
<cDB> <nConnection>
onomedoDATABASEquesedesejaaveriguar. onmerodaconexocomoservidorutilizadaparaextrairainformao.Se este parmetro for omitido ser substitudo por um valor padro, segundo o algoritmoabaixo: Sehouveralgumarquivoabertonareaatualeseeleforumatabelaaberta comaSQLLIB,utilizeeconexodestatabela . Casocontrrioaconexoatualserassumida.
lFound
umvalorlgicoindicandose<cDB>existenoservidor.Estafunofazuso doSCHEMAatualparaefetuarapesquisa.
Exemplo:
#include'sqllib.ch' /* *Nesteexemplo,checamosseobancodedadosjexiste,caso *contrriocriamosele. */ SQLCONNECTON'192.168.0.1' PORT3306 DATABASE'template1' USER'postgres' PASSWORD'sql' LIB'PostgreSQL' INTOnPostSQL IFDatabase(sistema) *Databasejexiste! ELSE SQLEXECUTECREATEDATABASEsistema End SQLDISCONNECTnPostSQL
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.51
Consultetambm:
SQLGETDBS() TABLE() INDEX()
30. TRUERECCOUNT()
Retorna a quantidade correta de registros de uma tabela. Esta funo ignora o valor de SQL_ROWIDaocalcularosregsitros. Sintaxe:
TrueReccount()>nCount
Onde:
<nCount>
Representaaquantidadederegistrosreaisdatabela.
NormalmenteaSQLLIBcalculaaquantidadederegistrosdeumatabelaatravsdoseguinte comando: SELECTmax(sql_rowid)FROMtabela No entanto, em alguns casos necessrio sabermos aquantidade realderegistros deumatabela, nestecasoentooprogramadorpodefazerusodestafuno.
31. SQLCOPYTABLE()
Duplica os dados da tabela passada como argumento para uma nova, incluindo seus dados e sua estrutura. Sintaxe:
SQLCopyTable(<cSource>,<cDestiny>)>lSuccess
Onde:
<cSource> <cDestiny>
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.52
32. SQLRENAMETABLE()
Altera o nome de uma tabela existente no servidor. O comando RENAME TABLE mapeado internamenteparaexecutarestafuno. Sintaxe:
SQLRenameTable(<cSource>,<cNewName>)>lSuccess
Onde:
<cSource> <cNewName> lSuccess
Exemplo:
?SQLRenameTable(clientes.dbf,clientes_antigo.dbf)
Consultetambm:
SQLCOPYTABLE() SQLRENAMEINDEX() SQLDROPTABLE()
33. SQLRENAMEINDEX()
AlteraonomedeumndiceexistentejcriadopelaSQLLIB.OcomandoRENAMEINDEX mapeadointernamenteparaexecutarestafuno. Sintaxe:
SQLRenameIndex(<cIndexName>,<cNewName>)>lSuccess
Onde:
<cIndexName> <cNewName> lSuccess
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.53
Exemplo:
USEclientesNEWVIAMySQL INDEXONnomeTOidxnome.ntx CLOSEALL ?SQLRenameIndex(idxnome.ntx,nomeindex.ntx) USEclientesNEWVIAMySQL SETINDEXTOnomeindex.ntx
Consultetambm:
SQLCOPYTABLE() SQLRENAMETABLE()
34. SQLDROPTABLE()
Removeumatabelaespecficadobancodedados. Sintaxe:
SQLDropTable(<cTableName>)>nil
Onde:
<cTableName>
astringidentificandoonomedatabelaqueser removidadobancodedados.
Exemplo:
SQLDropTable(tabla.dbf)
Consultetambm:
SQLRENAMETABLE()
35. SQLDROPINDEX()
Removeumoumaisndicesexistentescomnomeigualaopassadoporparmetro. Sintaxe:
SQLDropIndex(<cIndexName>)>nil
Onde:
<cIndexName>
astringidentificandoonomedondiceaserremovido.Vocpodeutilizaro asterisco * como curinga para excluir mais de um ndice com o mesmo comando.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.54
Exemplo:
USEclientesNEWVIAMySQL INDEXONnomeTOidxnome.ntx CLOSEALL ?SQLDropIndex(idxnome.ntx) USEclientesNEWVIAMySQL SETINDEXTOidxnome.ntx
//Erro:oindicenaoexiste
Consultetambm:
SQLRENAMEINDEX()
36. SQLALTERTABLE()
Altera a estrutura de uma tabela existente e deixaa igual estrutura passada como parmetro inclusivenaORDEMEXATAdoscampos (seoservidorforMySQL). Sintaxe:
SQLAlterTable(<cTabela>,<aStruct>,[<nConnection>])>lSuccess
Onde:
<cTabela> <aStruct>
Casoumcampoexistanatabela ,masnoem<aStruct>serdeletado Caso um campo exista em ambos o tipo de campo, tamanho e outros
critriosserovalidadosesenecessrio,ocamposeralteradoparapossuir asnovascaractersticascontidasem<aStruct>.
lSuccess
umvalorindicandoxitoounonaexecuodafuno.
Exemplo:
Demos\structdemo.prg
37. SQLUSECUSTOMINDEXES()
Indica se a SQL LIB deve permitir ou no o uso de ndices customizados. Esta funo vem desabilitadaporpadronaSQLLIBedeveseralteradacasooprogramadordesejeutilizarestetipo dendice. Sintaxe:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.55
SQLUseCustomIndexes([<lActive>])>lOldValue
Onde:
<lActive> lOldValue
38. SQLBEGINTRANS()
Iniciaumanovatransaoemtodasasconexesatualmenteabertaseincrementaocontador de transaesem+1. Sintaxe:
SQLBeginTrans()>nil
Consultetambm:
SQLENDTRANS() STARTTRANSACTION
39. SQLENDTRANS()
FinalizaumblocodetransaoabertocomafunoSQLBEGINTRANS()ouocomandoSTART TRANSACTION, envia um COMMIT das alteraes pendentes (se houver) e decrementa o contadordetransaesativasem1. Sintaxe:
SQLEndTrans()>nil
Consultetambm:
SQLBEGINTRANS() SQLCOMMIT() SQLROLLBACK()
40. SQLCOMMIT()
Gravatodasasalteraesfeitasdentrodeumblocodetransaes,masnoafinaliza.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.56
Sintaxe:
SQLCommit()>nil
Consultetambm:
SQLBEGINTRANS() SQLROLLBACK() SQLCOMMIT
41. SQLROLLBACK()
Descartatodasasalteraesefetuadasnoblocodetransaoatualemtodasastabelasenvolvidas, masnofinalizaoblocodetransaes. Sintaxe:
SQLRollBack()>nil
Consultetambm:
SQLENDTRANS() SQLCOMMIT() SQLROLLBACK
42. SQLTRANSCOUNT()
Retornaumnmeroindicandoquantastransaesestoemaberto. Sintaxe:
SQLTransCount()>nCount
Onde:
<nCount>
Nmeroindicandoquantastransaesestoemabertoatomomento.
Exemplo:
BEGINTRANSACTION ?SQLTransCount() ENDTRANSACTION ?SQLTransCount() //Result:0 //Result:1
Consultetambm:
BEGINTRANSACTION ENDTRANSACTION
43. SQLGETDBINFO()
Estafunoretornaumarraycominformaesextradas doservidorSQL.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.57
Sintaxe:
SQLGetDBInfo(<nDBInfo>,[<nConn>])>xResult
Onde:
<nDBInfo>
umvalornumricoindicandoqualotipodeinformaoquesedesejaextrair doservidorSQL. Constante DBI_GETVERSION Descr io Obtmumastringcomonomeeaversodo bancodedados. Retorna o nmero dodriver interno da SQL LIB que gerencia esta conexo, tambm conhecidocomoSystemID Retornaumaexpressocaracter indicandoo nome do driver utilizado para gerenciar esta conexo. Obtmumalista detodososbancosdedados cadastradosnoservidor. Obtm uma lista com todas as tabelas registradasdentrodabasededadosatual Obtm uma lista de todos os ndices registradosdentro dabasededadosatual. Obtm uma lista de todos os usurios cadastradosnoservidorSQL.
DBI_GETSYSTEMID
DBI_GETSYSTEMIDSTR
DBI_GETALLDBS
DBI_GETALLTABLES
DBI_GETALLINDEXES
DBI_GETALLUSERS
DBI_GETALLCONNUSERS Obtm uma lista de todos os usurios atualmente conectados no servidor e retorna diversasinformaes,taiscomo: NomedousurioeIP(ounomedaCPU) deondeousurioestconectado Nome do banco de dados atualmente conectado Portaqualeleestconectado Comando SQL atualmente em execuo poresteusurio(quandodisponvel) Todas estas informaes so obtidas como expressestotipocaracter.
<nConn>
onmerodaconexocomoservidorutilizadaparaextrairainformao.Se este parmetro for omitido ser substitudo por um valor padro, segundo o
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.58
o valor de retorno contendo ainformao solicitada. Pode ser um ARRAY, uma expresso CARACTER ou NUMRICA dependendo do valor de
<nDBInfo>.
Existem vrias funes simples disponibilizadas pela SQL LIB que utilizam esta funo para simplificar seu usoporpartedoprogramador, algumas delas so alistadas logo baixo, sobo item Consulte. Exemplo:
#include'sqllib.ch' cls ?Servidoratual,SQLGetDBInfo(DBI_GETVERSION)) ?Usriosconectadosatualmentenesteservidor: ?ToString(SQLGetDBInfo(DBI_GETALLCONNUSERS)) ? wait
Consultetambm:
SQLGETTABLES() SQLGETDBS() SQLGETINDEXES() SQLGETCONNECTEDUSERS() SQLGETUSERS()
44. SQLGETTABLES()
Retorna um array contendo os nomes de todas as tabelas registradas no banco dedados atual da conexopassadaporparmetro. Sintaxe:
SQLGetTables([<nConn>],[<cMask>])>aResult
Onde:
<nConn>
onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. um parmetro opcional que especifica um filtro para a listagem a ser retornada. Podeseutilizaroasterisco*comocuringaparaofiltro.
<cMask>
aResult
Umarraycontendoosnomesdastabelasencontradas.
Exemplo:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.59
Consultetambm:
SQLGETDBINFO() SQLGETINDEXES()
45. SQLGETINDEXES()
Retorna um array contendoos nomes de todos os ndices registrados no banco dedados atual da conexopassadaporparmetro. Sintaxe:
SQLGetIndexes([<nConn>],[<cMask>])>aResult
Onde:
<nConn>
onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. um parmetro opcional que especifica um filtro para a listagem a ser retornada. Podeseutilizaroasterisco*comocuringaparaofiltro.
<cMask>
aResult
Umarraycontendoosnomesdetodos osndicesencontrados.
Consultetambm:
SQLGETTABLES() SQLGETDBINFO()
46. SQLGETDBS()
Retorna uma lista com todos os nomes de bancos de dados cadastrados no servidor da conexo solicitada. Sintaxe:
SQLGetDBs([<nConn>],[<cMask>])>aResult
Onde:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.60
<nConn>
<cMask>
aResult
Umarraycontendoosnomesdetodososndicesencontrados.
Consultetambm:
SQLGETTABLES() SQLGETINDEXES() SQLGETDBINFO()
47. SQLGETUSERS()
RetornaumalistacontendotodososusurioscadastradosnoservidorSQL. Sintaxe:
SQLGetUsers([<nConn>])>aResult
Onde:
<nConn>
aResult
Consultetambm:
SQLGETCONNECTEDUSERS() SQLGETDBINFO()
48. SQLGETCONNECTEDUSERS()
Obtmumalistadetodososusurios atualmenteconectadosnoservidorSQL. Sintaxe:
SQLGetConnectedUsers([<nConn>])>aResult
Onde:
<nConn>
onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. Um array contendo os nomes de todos os usurios atualmente conectados no servidor.
aResult
Estafunoretornadiversasinformaes,taiscomo:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.61
49. SQLSERVERVERSION()
RetornaumastringcontendoonomeeaversodoservidorSQLdaconexosolicitada. Sintaxe:
SQLServerVersion([<nConn>])>cVersion
Onde:
<nConn>
cVersion
Exemplo1:
cConn:="MySQL=192.168.0.1usuario=rootbanco=jose" SQLCONNECTcConnINTOnMySQL cConn:="PostgreSQL=192.168.0.1usuario=postgressenha=postbanco=Demos" SQLCONNECTcConnINTOnPostSQL ?SQLServerVersion(nMySQL) ?SQLServerVersion(nPostSQL) //Result:MySQL4.1.9max //Result:PostgreSQL8.1.2
Consultetambm:
SQLGETDBINFO()
50. SQLSERVERDATE()
RetornaadataatualdocomputadorondeoservidorSQLdaconexosolicitadaestiverem execuo. Sintaxe:
SQLServerData([<nConn>])>dDate
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.62
Onde:
<nConn>
onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. a data atual do computador onde o servidor est em execuo ou NIL se a conexonoforvlida.
dDate
Exemplo1:
cConn:="MySQL=192.168.0.1usuario=rootbanco=jose" SQLCONNECTcConnINTOnMySQL Data1:=DATE() Data2:=SQLServerDate() IfData1<>Data2 ?Adatadeseucomputadoresterrada!Favorcorrigir! end
Consultetambm:
SQLSERVERTIME()
51. SQLSERVERTIME()
RetornaahoraatualdocomputadorondeoservidorSQLestemexecuo. Sintaxe:
SQLServerTime([<nConn>])>cTime
Onde:
<nConn>
cTime
Exemplo1:
cConn:="MySQL=192.168.0.1usuario=rootbanco=jose" SQLCONNECTcConnINTOnMySQL HoraAtual:=DATE() HoraServer:=SQLServerDate() ?Ahoraatualdoseumicro:,HoraAtual ?AhoraatualnoservidorSQL:,HoraServer pause
Consultetambm:
SQLSERVERTIME()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.63
52. SQLDATE()
Formataadatapassadacomoargumento,paraumastringvlidaparapesquisaemSQL. Sintaxe:
SQLDate([<dDate>])>cDate
Onde:
<dDate>
a data a ser convertida para uma expresso caracter. Se este argumento for omitidoadataatualdocomputadorserassumida. adatapassadacomoargumentonoformatoAAAAMMDDou000101 01caso umadatavaziasejaencontrada. Notequeestafunojretornaadatasolicitadacomostringedelimitadacom aspassimples.
cDate
Exemplo1:
cConn:="MySQL=192.168.0.1usuario=rootbanco=jose" SQLCONNECTcConnINTOnMySQL cSQL:=select*fromfuncionriosWHEREdataAdmissao=+ SQLDate(Date()) USESQL(cSQL)NEWALIAStemp Browse()
Consultetambm:
SQLSTR()
53. SQLSTR()
FormataastringpassadacomoargumentoretornandoumastringSQLvlida(ejdelimitada)que vocpodeusaremuma instruoSQL. Sintaxe:
SQLStr(<cString>,[<nSystemID>])>cResult
Onde:
<cString> <nSystemID>
astring contendoaexpressoaserformatada. onmerododrivertambmconhecidocomoSystemIDquegerenciaesta conexo a string formatada e delimitada com aspas simples para uso em comandos SQL.
cResult
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.64
Exemplo:
Nome :=JoseMatiasdaSilva Salario:=1200.00 cSQL:=INSERTINTOfuncionrios(nome,salario)VALUES(+ SQLStr(Nome)+,+SQLnTrim(Salario)+) SQLEXECUTEcSQL
Consultetambm:
NTRIM()
54. SQLNTRIM()
Converteumvalornumrioparaumaexpressocaracterremovendoquaisquerespaosnastring. Estafunotambmpossuioutronome:NTRIM(). Sintaxe:
SQLnTrim(<nValue>)>cValue nTrim(<nValue>)>cValue
Onde:
<nValue> cValue
onmeroaserconvertido. astringcontendoovalornumricoconvertidoparacaracteresemespaos.
Exemplo:
Nome:=JoseMatiasdaSilva Salario:=1200.00 cSQL:=INSERTINTOfuncionrios(nome,salario)VALUES(+ SQLStr(Nome)+,+SQLnTrim(Salario)+) SQLEXECUTEcSQL
Consultetambm:
SQLSTR()
55. TOSTRING()
Converte o valor passado como argumento de qualquer tipo, para uma expresso caracter e opcionalmenteformatada. Sintaxe:
TOSTRING(<xValue>,[<lFormatted>])>cValue
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.65
Onde:
<xValue> <lFormatted>
cValue
astringrepresentandoainformaocontidaem<xValue>emformatostring.
Exemplo1:
/* *Iremosdepurarovalordeumavarivel */ aFiles:=directory(*.*)
Exemplo2:
/* *Vamosgravarasprefernciasdecoresdousurioemumatabela *eiremosrestauralasnosprximoslogins. */ PUBLICaColors USEsetupNEWVIAMySQL IFEmpty(SETUP_COLOR) aColors:={W+/B*,B/W,W+/R} REPLACESETUP_COLORWITHToString(aColors,.F.) ELSE aColors:=&SETUP_COLOR. End ALERT(SQLVersion()+'&'+Version(),{Ok},aColors[1]) quit
Consultetambm:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.66
SQLSTR() SQLNTRIM()
56. SQLROWID()
RetornaoltimovalornumricolidodacolunaSQL_ROWIDdatabelaatual. Sintaxe:
SQLRowID()>nValue
Onde:
<nValue>
oltimovalorlidodacolunaSQL_ROWID.
57. SQLVERSION()
Retornaumstringinformandoaverso,onmeroeomsdelanamentodaSQLLIB. Sintaxe:
SQLVersion([<lShort>])>cVersion
Onde:
<lShort>
umvalorlgicoindicandosedesejamosobterapenasumadescriosimples daversoousedesejamosobtertodososdetalhesdamesma.
Exemplo:
?SQLVersion() ?SQLVersion(.T.) //Result:SQLLIBCOMERCIALv1.2bMarch/2006 //Result:v1.2b
Consultetambm:
SQLSERVERVERSION()
58. SQLLIB()
RetornaverdadeiroseatabelaatualforumatabelaabertautilizandoseaSQLLIB. Sintaxe:
SQLlib()>lSQL
Onde:
<lSQL>
IndicaseatabelaabertanareaatualpertenceSQLLIB.
Exemplo:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.67
Consultetambm:
SQLSERVERVERSION()
59. SQLBACKUPSTART()
Inicia o sistema de backup da SQL LIB e reserva o HANDLE do arquivo .SQL passado como argumento,retornandoumvalornumricoqueindicaoxitoounodaoperao. Sintaxe:
SQLBackupStart(<cFile>,[<nPacketSize>],[<lDropObjects>], [<bEval>],[<nConnection>])>nSuccess
Onde:
<cFile> <nPacketSize>
onomedoarquivo.SQLquesergeradocomosdadosdobackup. Informa quantos registros sero copiados por bloco dados. Se omitido o padroseSETPACKETSIZEserassumido. Este parmetro indica se os objetos (tabelas, views entre outros) devem ser excludosdabasededados,antesdobackupiniciarse,seomitidoopadro FALSE. Caso esteja recuperando um backup de uma tabela, por exemplo, e ela j existir nabasededados,seesteparmetroforverdadeiro,atabelaatualser excluda e recriada novamente. Se falso for especificado os dados do script atualseroadiconadosaofinaldatabelajexistente. Useesteparmetrocomcuidadoaocriarerecuperarscriptsdebackup.
<lDropObjects>
<bEval>
um code block que ir controlar o comportamento das rotinas de backup paraestaoperao. Este codeblock ser processado sempreque necessrio ou alguma operao for executada/gravada ou algo de imprevisto ocorrer durante a operao de backup. Este codeblock receber trs parmetros chamados de nMode, ObjName e Data , sendo o primeiro numrico que conter o Modo atual dobackup e os outros2valorespoderomudardeacordocomostatus/modoatualdafuno: ValordenMode Descrio
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.68
SQL_BACKUP_BEGIN
Iniciouse o processo de backup. Os dois parmetrosfinaispassadosso: ObjName contmo nomedo arquivo .SQL gerado. Data contm o Handle do arquivo obtivo comFCREATE(). O codeblock deve ento retornar .T. para prosseguir comobackupou.F.paracancelar a operao.
SQL_BACKUP_END
O processo de backup est concludo. Os dois parmetrosfinaispassadosso: ObjNamecontmonomedoarquivo.SQL gerado. Data contm o Handle do arquivo obtivo comFCREATE(). Qualquervalorderetornoparaestemodoser ignoradopelaSQLLIB.
SQL_BACKUP_DDL
Indica que uma instruo SQL que altera a estrutura de algum objeto no banco de dados estprontaparaserexecutada. ObjName contm o nome do objeto que serafetado. Data contmotipodeinformaoqueest prestesaseralterada,podendoser: SQL_BACKUP_TABLE, SQL_BACKUP_VIEW, SQL_BACKUP_FUNC, etc... O codeblock deve ento retornar .T. para permitir que o comando seja executadoou .F. para ignorar aoperao.
SQL_BACKUP_DATA
Indica que uma instruo SQL que adiciona dados no banco de dados est pronta para ser executada. ObjName contm o nome da tabela que seratualizada. Data contm SQL_BACKUP_TABLE o valor
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.69
SQL_BACKUP_ERROR
Indica que algum erro inesperado ocorreu durante o processo. Neste caso os dois parmetrosfinaisso: ObjName contm o comando SQL que gerouoerro. Data contm o nmero da linha no script SQLquegerouaexceo.
Parmetro indicando a conexo para se extrair as informaes desejadas. Se omitidoonmerodaconexoatual. um valor numrico indicando o xito ou no da funo. Pode possuir os seguintesvalores: Retorno >0 Comentrio No foi possvel criar o arquivo de backup, o valor retornadoovalorobtidodeFERROR(). OHandlepassadodaconexoSQLnofoiencontradoou invlido Erroaopuxaraestruturadatabela
nSuccess
AfunoSQLBACKUPSTART()iniciaosistemadebackupereservamemriaerecursosparaas demaisfunesdeprocessamentomaselanogeraobackupdenenhumainformao! UmbackupfeitopelaSQLLIBconsisteemumaoumaischamadasfunesauxiliaresdaRDD, comoporexemplo,achamadafunoparaSQLBACKUPTABLE()paraseefetuarosbackupsde uma ou mais tabelas do servidor, ou ainda, SQLBACKUPROUTINES() para gerar o backup de views,triggers,functions ouSP . Oimportanteteremmentequeestafunoapenasinicia oprocesso,quedeveserfinalizadocom SQLBACKUPEND(). Exemplo1:
cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=demos" SQLCONNECTcConnINTOnMySQL IFSQL_ErrorNO()>0 Return(.F.) ENDIF /* *Aquifazemosobackupdetodaabasededados */ SQLBackupStart('backup.sql',10,TRUE) SQLBackupTable('*.*') SQLBackupRoutines() SQLBackupEnd()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.70
Exemplo2
#includesqllib.ch CLEARSCREEN SQLBackupStart('backup.sql',10,.T., {|nMode,cObjName,uData|ShowProcess(nMode,cObjName,uData)}) SQLBackupTable('*.*') SQLBackupRoutines() SQLBackupEnd() ? quit /* *Estanossafunopersonalizadaqueexibeinformaes *diversassobreoprocessodebackup. */ FUNCTIONShowProcess(nMode,cObjName,uData) docase casenMode==SQL_BACKUP_BEGIN ?'Backupiniciadoem',cObjName,'handle=',uData Fwrite(uData,'#Backupiniciado') casenMode==SQL_BACKUP_END ?'BackupTerminado!' Fwrite(uData,'#Backupefetuadocomsucesso!!') casenMode==SQL_BACKUP_DDL ?'ExtraindoMetadadosda',SQL_BACKUP_OBJECTS[uData],cObjName /* *NodeixaelefazeroBKPdastabelasiniciadascom *estasequenciadeletras(apenasparaexemplificar) */ IFLEFT(cObjName,3)=='sr_'THEN RETURN.F. casenMode==SQL_BACKUP_DATA ?'Extraindodadosde',cObjName,'registros',uData /* *NodeixaelefazeroBKPdastabelasiniciadascom *estasequenciadeletras(apenasparaexemplificar) */ IFLEFT(cObjName,3)=='sr_'THEN RETURN.F. End RETURN.T.
Consultetambm:
SQLBACKUPEND() SQLBACKUPTABLE() SQLBACKUPROUTINES()
60. SQLBACKUPEND()
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.71
Finaliza um backup iniciado com SQLBACKUPSTART(), libera memria e fecha os handlesde arquivosalocadosenomaisnecessrios. Sintaxe:
SQLBackupEnd()>nError
Onde:
<nError>
Se algum erro ocorrer durante o processo, tal como a impossibilidade de se fecharoarquivo.SQLcriadoporSQLBACKUPSTART(),estevalorderetorno seromesmocorrespondenteFERROR().
Consultetambm:
SQLBACKUPSTART()
61. SQLBACKUPRESTORE()
RestauraumBACKUPpreviamentegeradopelaSQLLIBouporferramentasdeterceiros. Sintaxe:
SQLBackupRestore(<cFile>,[<lDropObjects>], [<lAbortOnAnyError>], [<bEval>],[<nConnection>]) >nSuccess
Onde:
<cFile> <lDropObjects>
EsteparmetroaindanofoiimplementadonaversoatualdaSQLLIBe podeserignorado.
<lAbortOnAnyError>
Valorlgicoindicandoseaoperaodebackupdevesercanceladaquando umerroocorrer. Estaopoest.T.porpadro,casosejaespecificadoumvalor.F.,ocode block informado em <bEval> deve decidir se a execuo do script deve prosseguirouno.
<bEval>
um code block que ir controlar o comportamento desta operao de restauraodedados. Este codeblock ser processado sempre que necessrio ou alguma operao for executada/gravada ou algo de imprevisto ocorrer durante a operaodebackuperecebeosmesmosparmetrospassadospelafuno SQLSTARTBACKUP()
<nConnection>
Parmetroindicandoaconexoparaserestaurarasinformaesdesejadas. Seomitidoonmerodaconexoatual.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.72
Exemplo:
/* *restauraobackupcriadonoexemplodafunoSQLStartBackup() */ SQLBackupRestore('backup.sql')
Consultetambm:
SQLSTARTBACKUP()
62. SQLBACKUPTABLE()
Geraoscriptdebackupparaumaoumaistabelasouviewsdobancodados. Estafunodeveser usada depois deSQLBACKUPSTART()e antes deSQLBACKUPEND(). Sintaxe:
SQLBackupTable(<xTables>,[<lExtractData>],[<lExtractStruct>], <nPacketSize>)>nSuccess
Onde:
<xTables>
<lExtractData>
umvalorlgicoindicandoseaSQLLIBdevegerarobackupdosdadosdas tabelasrelacionadasem<xTables>. umvalorlgicoindicandoseaSQLLIBdevegerarobackupdaestrutura dastabelassolicitadas. Esteparmetrocomo.F.tilparasetransferirosdadosdeumatabela,para outra tabela sem apagar nenhuma informao. Por padro a RDD efetua o backuptantodosdados,quandodaestruturadatabela.
<lExtractStruct>
<nPacketSize>
um valor numrico indicando aquantidade deregistros a serem includos no script gerado. Se omitido, o padro de SQLBACKUPSTART() ser assumido. umvalorigualzero,indicandosucessoououtrovaloremcasode erro.
<nSuccess>
Exemplo1:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.73
Exemplo2:
/* *Omesmoexemploacima,queefetuaobackupdeduas *tabelas,agoraemumanicalinha: */ SQLBackupStart('backup.sql') SQLBackupTable({'clientes','fornecedores'}) SQLBackupEnd()
Exemplo3:
/* *Fazobackupdosdadosdatabelaclientes,masnodasuaestrutura *(istotilparasetransferirosdadosparaoutratabelasemapagar *nenhumainformao) */ SQLBackupStart('clientes.sql') SQLBackupTable('clientes',.T.,.F.) SQLBackupEnd()
Exemplo4:
/* *Geramosobackupdosdadosdasvendasparaenviarparaafilial. *Usamosumasteriscoparafazerbackupdastabelas:PEDIDOS, *PEDIDOS_ITEMSePEDIDOS_PRAZOS: */ SQLBackupStart('filial.sql') SQLBackupTable('clientes',.T.,.F.) SQLBackupTable('pedidos*.*',.T.,.F.) SQLBackupEnd()
Consultetambm:
SQLBACKUPROUTINES()
63. SQLBACKUPROUTINES()
Geraobackupdasfunctionseprocedures deumbancodedados,filtrandoosobjetos utilizandoa mscarapassadacomoargumento. Sintaxe:
SQLBackupRoutines([<cMask>])>nResult
Onde:
<cMask>
amscaraaserutilizadacomofiltroparaosobjetosqueserocopiadosparao
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.74
scriptdebackup.Podeseutilizaroasteriscocomocuringanesteparmetro.
<nSuccess>
umvalorigualzero,indicandosucessoououtrovaloremcasodeerro.
Exemplo:
SQLBackupStart('system.sql') SQLBackupRoutines() SQLBackupEnd()
Consultetambm:
SQLBACKUPTABLE()
64. SQLBACKUPBLOCK()
Obtm eopcionalmente permite trocaro codeblock que est monitorando asoperaesatuaisde backupporoutro. Sintaxe:
SQLBackupBlock([<bBlock>])>bOldBlock
Onde:
<bBlock>
um parmetro opcional, que indica o novo codeblock que ir substituir o especificado em SQLBACKUPSTART no gerenciamento das operaes de backup. umacpiadocodeblockatualmenteativo.
bOldBlock
Consultetambm:
SQLSTARTBACKUP()
65. SQLSCHEMA()
Consulta e opcionalmente altera o SCHEMA atualmente em uso para as tabelas aberta com o comandoUSE. Sintaxe:
SQLSchema([<cNewSchema>])>cOldSchema
Onde:
<cNewSchema> <cOldSchema>
onomedonovoSCHEMAaserutilizadoparaaberturadastabelas. oSCHEMAatualmenteemusoeativo.
Exemplo:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.75
//Abreatabelavendas.pedidos
Consultetambm:
SELECTSCHEMA
66. SQLSYSTEMSCHEMA()
ConsultaeopcionalmentealteraoSCHEMAatualmenteemusoparaastabelasdosistema. Sintaxe:
SQLSystemSchema([<cNewSchema>])>cOldSchema
Onde:
<cNewSchema> <cOldSchema>
onomedonovoSCHEMAaserutilizadoparaaberturadastabelasdosistema oSCHEMAatualmenteemusoeativo.
Tabelas do sistema, so as tabelas utilizadas pela SQL LIB para monitorar o controle ndices e outrasinformaes,taiscomoSQL$INDEXESeoutrasquepossamsurgir. Consultetambm:
SQLSCHEMA() SELECTSCHEMA
67. _SQL_GETPOINTER()
Funo de baixo da API que retorna um ponteiro contendo informaes diversas da tabela atualmenteselecionada. Sintaxe:
_SQL_GetPointer()>nPointer
Onde:
<nPointer>
umnumeroindicandooponteirocontendoinformaesdatabela.
As funes de baixo nvel da API devem ser utilizadas com cautela, pois quando estas funes foremerroneamenteaplicadasemtabelasquenoforam abertascomaSQLLIB,podeacarretarem instabilidade dosistemaegerarvriasGPFs.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.76
68. _SQL_GETCONN()
FunodebaixodaAPIqueobtmohandledaconexoSQLapartirdeoponteiropassadocomo parmetro. Sintaxe:
_SQL_GetConn(<nPointer>)>nConnection
Onde:
<nPointer> nConnection
oponteiroretornadopor_SQL_GETPOINTER() onmerodaconexoutilizadaparacomunicarsecomoservidorSQL.
Consultetambm:
_SQL_GETPOINTER()
69. _SQL_SYSTEMID()
RetornaodriverIDtambmchamadodeSystemIDdopointerpassadocomoargumento. Sintaxe:
_SQL_SYSTEMID(<nPointer>)>nSystemID
Onde:
<nPointer> nSystemID
Consultetambm:
_SQL_GETPOINTER() _SQL_SYSTEMIDSTR()
70. _SQL_SYSTEMIDSTR()
RetornaumastringrepresentandoodriverIDdopointerpassadocomoargumento. Sintaxe:
_SQL_SYSTEMIDSTR(<nPointer>)>cSystemID
Onde:
<nPointer> cSystemID
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.77
representadaem<nPointer> Consultetambm:
_SQL_GETPOINTER() _SQL_SYSTEMID()
71. _SQL_TABLESTYLE()
Retornaotipodetabelarepresentadapeloponteiropassadocomoargumento. Sintaxe:
_SQL_TABLESTYLE(<nPointer>)>nType
Onde:
<nPointer> nType
oponteiroretornadopor_SQL_GETPOINTER() Retornaotipodecomandoutilizadoparaabrirestatabela.Ospossveisvalores estoalistadosnatabelaabaixo: Cdigo TS_COMPLEX_SQL Comentrio IndicaqueatabelafoiabertacomocomandoUSE SQLeportanto,atabelasomenteleitura. IndicaqueatabelafoiabertacomocomandoUSE normal e pode ser atualizada com o comando REPLACEnormalmente.
TS_SINGLE_SQL
Consultetambm:
_SQL_GETPOINTER()
72. _SQL_TABLENAME()
Retornaonomedatabeladoservidoraoqualestareaest vinculada,representadapeloponteiro passadocomoargumento. Sintaxe:
_SQL_TABLENAME(<nPointer>)>cTableName
Onde:
<nPointer> cTableName
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.78
Consultetambm:
_SQL_GETPOINTER()
73. _SQL_FULLTABLENAME()
Retorna o nome completamente qualificado que identifica a tabela no servidor SQL, conforme indicadonoponteiropassadocomoparmetro. Sintaxe:
_SQL_FullTableName(<nPointer>)>cFullName
Onde:
<nPointer> cFullName
oponteiroretornadopor_SQL_GETPOINTER() onomecompletamentequalificadodatabelaqual<nPointer>serefere.
Consultetambm:
_SQL_GETPOINTER()
74. _SQL_TABLESCHEMA()
RetornaoSCHEMAatualdatabelarepresentadapeloponteiropassadocomoargumento.. Sintaxe:
_SQL_TableSchema(<nPointer>)>cSchemaName
Onde:
<nPointer> cSchemaName
oponteiroretornadopor_SQL_GETPOINTER() onomedoSCHEMAaoqualestafunoestvinculada
Exemplo:
#include'sqllib.ch' endif
Consultetambm:
SQLDISCONNECT
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.79
APNDICEA ndicescomaSQLLIB
A SQL LIB trabalha com dois tipos de ndices: SIMPLES e CUSTOMIZADO. H grandes diferenas no modo como ela gerencia estes tipos de ndices e o mais importante: ndices customizadossomaislentosparaseatualizarnabasededados. Paraentendermosmelhor,umndicecustomizadoumndicequepossuiumaoumaisfunesem suachave,eisalgunsexemplos:
useVENDAS.DBFnewaliasVENDASviaMySQL indexonSUBSTR(NOME,1,5)+DTOS(dData) indexonSTRZERO(nPEDIDO)+VENNOME indexonDESCEND(dEfetuado) toCLIANIV.NTX toPEDVEN.NTX toEFET.NTX
Noprimeirocasoacima,aSQLLIBcriarumnovocampochamadoSQL_INDEX_CUSTOM001, dentroda tabela VENDAS.Depois de criar este campo, a SQLLIB ir processar aexpresso do ndice, nestecasooSUBSTR( NOME, 1,5) + DTOC( Data )paratodososregistrosdatabela, armazenandoosvalorescorretosnanovacolunageradaesomentedepoisdisto,ircriarumndice combasenestanovacolunacriada.Omesmoprocessoirserrepetidonosoutros2ndicescriados: PEDVEN.NTXeEFET.NTX. Comodeseimaginar,esteprocessopodesetornarextremamentelento,especialmenteseatabela emquestopossuiralgunsmilharesoudezenasdemilharesderegistros.Exatamenteporisto,ouso destetipodendicealtamentedesaconselhado,excetoemcasosemquenopossvelsubstituilo porumndicesimples. Um ndice SIMPLES um ndice formado pela juno de um ou mais campos, sem o uso de funes.Eisalgunsexemplosdecomosecriarndicessimples,utilizandooexemplocitadoacima, masagorarevisado:
useVENDAS.DBFnewaliasVENDASviaMySQL indexonNOME+dData toCLIANIV.NTX indexonnPEDIDO+cVENNOME toPEDVEN.NTX indexondEfetuado toEFET.NTX VocpodeseguramenteconcatenarcamposdotipoDATA,comcamposNUMERICOSouatmesmocom campos CARACTERES, sem necessitar fazer uso de nenhuma funo para converter os valores para expressescaracterespoisaSQLLIBfazistoparavocautomaticamente! Alm disto, a SQL LIB possui a vantagem nica de suportar tanto a sintaxe do DBFNTX, como tambm suportarousodeTAGsnomelhorestilodoDBFCDX.Vocpodetranquilamentemesclarambosostipos dendicesemseusistemaedeixaraSQLLIBfazertodootrabalhoparavoc!
Nos trs casos apresentados acima, a SQL LIB ir criar um ndice simples, ou seja, no ser necessriocriarnenhumacolunaadicional,nemseprocessarnenhumcomandoemtodaatabelada base de dados. Este tipo de ndice, tende a ser mais rpido e mais gil em sua criao, alm da vantagemdequeestetipodedadosaceleraaindamaisoprocessodegravaodosdadosnatabela porocasiodeumcomandoREPLACE. ASQLLIBpossuiumparser interno,queinteligenteobastanteparadetectarousodasfunes STR(), DTOC() e DTOS() nas chaves passadas para criao de ndices. Este parser detecta e determinaseaexpressopassadaparaocomandoINDEXON,podeserconvertida paraumndice simplesousenestecasosermaisadequadocriarumndicecompostoparaatabela.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.80
Eislogoabaixo,algunsexemplosdeconversesfeitassecriarmostrsndicesemumatabelacom estaschaves:
useVENDAS.DBFnewaliasVENDASviaMySQL indexonDTOS(dData)+cCodigoItem+Str(nPedNum)toPEDITEM.NTX indexonDTOS(dData)+cCodigoItem toPEDDATA.NTX indexonDTOS(dData)+Str(nVendedor) toPEDVEND.NTX
Nos trs casos acima, o parser interno da SQL LIB ir criar ndices simples para a tabela em questo, pois ele irprocessar cada expressopassada para a indexao como se estivessem sido escritasdestemodo:
useVENDAS.DBFnewaliasVENDASviaMySQL indexondData+cCodigoItem+nPedNum toPEDITEM.NTX indexondData+cCodigoItem toPEDDATA.NTX indexondData+nVendedor toPEDVEND.NTX
Aps a criao do ndice, podemos testar a funo INDEXKEY() para checarmos como foi indexadoatabelaacima:
useVENDAS.DBFnewaliasVENDASviaMySQL setindextopeditem,peddata,pedvend setorderto1 ?indexkey() setorderto2 ?indexkey() setorderto3 ?indexkey() quit
//Resultado:DTOS(dData)+cCodigoItem+Str(nPedNum)
//Resultado:DTOS(dData)+cCodigoItem
//Resultado:DTOS(dData)+Str(nVendedor)
Esterecursoespecialmentetil,quandosemigraumaplicativojexistenteparasetrabalharcoma SQL, pois a SQL LIB pode determinar qual ser o modo que ir lhe dar o melhor desempenho possvel. Exemplo:
demos\index.prg
Consultetambm:
SQLCUSTOMINDEXES
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.81
Voc ganha muita performance trabalhando como o exemplo acima, pois todos os COMMITs enviadosdentrodo blocoBEGIN/END TRANSACTION sero ignorados e os dadoscomitadosapenasnofinaldobloco,acelerandoemmuitootempodegravao. Seguindoseesteexemplo,chegasealevar0.05segundos paraadicionar2.415registros.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.82
DICAn2:
Substituir quando possvel o comando SET FILTER pelo uso de SQL FILTER que executadodoladodoservidor,ganhandoassimdesempenhomximo.Vejaumexemplo:
/* *ExemplodocomandoSETFILTER */ SELECTpedido_itens SETFILTERTOpedido_num=pedido>numero GOTOP /* *MesmocomandoagoracomSQLFILTER: */ SELECTpedido_itens SQLFILTERTOpedido_num=+nTrim(pedido>numero) GOTOP
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.83
APNDICEC UsandooFiveWineaSQLLIBRDD.
O usoda SQL LIBRDD com oFiveWin uma opo excelenteparaoprogramador. Com estas duasferramentasemmospossvelutilizaramelhorferramentacomercialparadesenvolvimento visualeamelhoropoparacomunicaocombancosdedadosSQL. Noentantoalgunscuidadosdevemserobservadosparaqueseuaplicativovenhaatrabalharde modo correto, pois algumas rotinas utilizadas pela SQL LIB j existem disponveis dentro do FiveWin.IstosedeveaoacessoODBCfornecidopeloFWjoferecerfunescomosnomestais comoSQLExecute()eSQLRollback()omesmoproblemanoacontececomnenhumaoutraLIB visual. Oresultadodesteaparenteconflitodefunesqueestranhamenteapsdarvrioscomandos SQL no banco de dados, as informaes estranhamente no so gravadas no servidor ou so gravadasapenasquandovocsaidoseuaplicativo. Para resolver este simples detalhe, voc deve certificarsede que os arquivos .LIB fornecidos comaSQLLIBestejamantesdaslibsdoFWnomomentodalinkagemdoseuaplicativoousejana ordemdasLIBaSQLLIBdevevirprimeirodoqueaFiveH.libea FiveHC.lib! Segueabaixoumpequenopassoapassosobrecomoresolverestedetalheusandoalgumasdas maiscomunsferramentasdecompilaoelinkagem. MyMake: SevocestiverusandooMyMakeparacompilarelinkarseusprojetos,saibaque elejpossuiaopoparacorrigirestecomportamento.Eiscomoefetuaroajustesimples:
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.84
o SelecioneoRDDdaSQLLIBparatrabalhoemseuprojetoclicandosobreaopo destacadaem vermelhonaimagemacima. o OMyMakeirdisponibilizaraopoSQLLIBantesdaslibsdoFW,conforme destacadoem verde bastadeixarestaopomarcadapararesolverestedetalhedas LIBs. o Salveasalteraesecompileseuprojeto. xDevStudio: SevocusaaxDevStudioparacompilarseuprojetoelajpossui aopopara ajustedesteparmetro daordemdaslibs.
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.
Pg.85