Você está na página 1de 85

GUIADEREFERNCIAE MANUALDEINSTALAO

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

Funesdiver sasdoser vidor SQL


SQLGetDBInfo().................................................................................................. SQLGetTables().................................................................................................. SQLGetIndexes()................................................................................................ SQLGetDBs()....................................................................................................... SQLGetUsers()................................................................................................... SQLGetConnectedUsers().................................................................................... SQLServerVersion()............................................................................................ SQLServerDate()................................................................................................. SQLServerTime()................................................................................................. IV43 IV44 IV45 IV46 IV47 IV48 IV49 IV50 IV51

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

Compatibilidade ApndiceA ndicescomaSQLLIB.......................................................................................... ApndiceBDicasdeperformance............................................................................................... ApndicaCUsandooFiveWineaSQLLIBRDD....................................................................

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

II InstalaoePr imeir ospassos


A SQLLIBdistribudadepormeioseletrnicos porduasmaneirasdistintas,poispossui2verses:a FREEquevisaajudartodosnacomunidadeoferecendoacessonativoMySQLeumaverso comercial,maisrobustaecompletacomacessocompletotodososbancosSQLsuportadospelaLIB. ParaclientesdaversoFREE, baixeopacotedeinstalaodiretamentedenossosite,clicando aqui: http://www.sqllib.com.br/download.php Paraclientescomerciais,vocreceberum email confirmandoosdadoscadastraisdesua empresa,juntamentecomseunmerodesrieparasuporte. Sigaasinstruesqueconstam nesteemailparaefetuarodownloaddaRDDcomercial. Osarquivosdeinstalaoda SQLLIBobedecemumanomenclaturadefcilcompreenso: SQLLIBv1.5cFREE.zip DenotaumarquivodeinstalaodaSQLLIBnaverso1.0eindicaqueamesmatrataseda versoFREE daRDD. SQLLIBv1.5cComercialDEMO.zip Denota umarquivodeinstalaodaSQLLIBnaverso1.0eindicaaversoCOMERCIAL da RDD,liberadaapenasparaclientesregistrados.

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.

3. Pr oblemasnaconexoaoser vidor SQL?


ASQLLIBforneceocomandoSQLCONNECTparaestabelecerumaconexocomoservidorSQL. Consulte logo abaixo neste manual sobre este o comando. Se estiver encontrando problemas em estabeleceraconexo,observealgumasdicas: 1. FirewallNocasodevocestartentandoacessarummicronaredeouviainternetenoestar conseguindo logar, verifique se h algum firewall ativo. Se houver, talvez seja necessrio habilitar acesso externo este micro pela porta que o servidor SQL usa por exemplo: o MySQLusaaporta3306eoPostgreSQL5432. 2. Autenticao Servidores SQL possuem um sistema de controle de acesso que variam de servidorparaservidor,masbasicamenteconsistememverificar3coisas: a. Seousuriovlido b. Seasenhainformadaconfere c. SeoIPdeonde partiuasolicitaodeconexovlido Este ltimo ponto importante por que, mesmo se um nome e senha corretos forem fornecidos,o servidor SQL pode recusar a conexo casooIP deondepartiu a solicitao noforvlido,combasenassuasconfiguraesinternas.

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

III GuiadeRefer ncia


Esta seo descreve os novos comandos e as novas funes introduzidas pela SQL LIB. O arquivo SQLLIB.CH contm as definiesde todos os comandos suportadospela RDD. Algo importantea ser mencionado, que tendo em vista que a SQL LIB foi projetada para ser de fcil utilizao e especialmente pensando nosusuriosque migram deoutras ferramentas parao nossoprojeto, muitos comandospossuemmaisdeumasintaxeemuitasfunespossuem aliasesvisandoagilizaroacessoea migraodecdigojexistente. Um exemplo tpico disto, o comando SQL CONNECT quepode ser acionado normalmente como:
SQLCONNECTON'localhost' PORT3306 DATABASE"test" USER"root" PASSWORD'' LIB'MySQL'

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

Basicamenteestasduaslinhasacimatmomesmoefeitoqueocomandoanteriormentepassado. Istoocorreparafacilitaramigraodecdigosjexistentesefacilitatambmaoprogramadorquepode selecionarqualmodo eleseadaptamelhorequalmaistilpara utilizaremseusaplicativos.


Outroscomandosqueutilizamestamesmasintaxeso:SETPACKETSIZE,SETTRANSLATEentremuitosoutros. Semprequeistoocorrer,iremosdemonstrarambasassintaxes,relacionandoambasassintaxes.Istoocorrertantopara oscomandos,quantoparaasfunes demodoquevocpossadecidirqualsintaxedesejautilizar,lembrandosesempre dequeambososcomandos/funessomapeadosparaamesmafuncionalidade.

Aseoquesesegue,conteroscomandose funessuportadas pelaRDD.

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

Feito isto, durante o processo de linkedio as funes necessriasseroincludasnoseuexecutvel.


PGSQL

IndicaqueaSQLLIBdeveutilizarodrivernativopara PostgreSQL para gerenciar esta conexo. No incio do seuaplicativo,vocdeveincluirobrigatoriamente:


REQUESTSQLLIB REQUESTPGSQL

Apelidos: PostgreSQL Postgres PostSQL

As duas linhas abaixo produzem o mesmo efeito do exemplo acima, pois chamam o driver do PostgreSQL porumdosseusapelidos:
REQUESTSQLLIB REQUESTPostgreSQL

Isto inclui as funes necessrias para suporte PostgreSQLemseuexecutvel.


<nOutPutVar>

Especificaonomedeumavarivelqueirreceberonmerodaconexoatual, sebemsucedidoouzeroemcasodeerro.Casoavarivelnoexista,sercriada comovalorderetorno.

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

Descr io Especifica o nomedousurioutilizado paraautenticaonoservidorSQL.

PASSWORD

Senhaparaautenticao. Nome do banco de dados ao qual desejamosnosconectar.

DATABASE

SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.

Pg.12

DRIVER

RDD,DRV,SQL, LIB SERVER, SERVIDOR, CONECTAR,IP, CONECTA,HST PORTA,PRT,EM

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>

Especificaonomedeumavarivelqueirreceberonmerodaconexoatual, sebemsucedidoouzeroemcasodeerro.Casoavarivelnoexista,sercriada comovalor deretorno.

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

SQLCONNECTcConnINTOnMySQL /* *Houvealgumerronaconexao? */ IFSQLErrorNO()>0 Alert("Nofoipossvelconectaraobancodedados!"+ "Informeestamensagemaosuporte:"+ SQLErrorMsg()) Return(.F.) ENDIF

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>

Especificaonmerodaconexoquesedesejafinalizar. Quandoespecificado,indicaquetodasasconexesabertasdevemserfechadas. Seomitidosomenteaconexoatualfechada.

Tenhasempremuitocuidadoaofinalizarumaconexo,certifiquesedequenenhumatabelaest atualmente abertaeutilizandoestamesmaconexo. Pois istopoderiagerardiversoserrosno seuaplicativo,almde instabilidadeeGPFs.

Consultetambm:
SQLCONNECT

4. SQLEXECUTE
Executa um comando SQL diretamente noservidore retorna. Esta funo nodeve ser utilizada

para enviar comandosqueretornemdadosdoservidor,utilizeocomandoUSESQLouafuno SQLARRAY()paraestafinalidade.


Sintaxes:
SQLEXECUTE<cSQL>[INTO<nHandle>][WITH[ARRAY]<aParms,...>]

Onde:

SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.

Pg.14

<cSQL> <nHandle> <aParms>

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>

EspecificaotipodeconversoaplicadaaoPATHdeumarquivo. Parailustrarautilizaodestecomando,atabelaabaixoirlistarospossveis valorespara<nMode>edemonstraroresultadoquevocobteriaseutilizasseo comandoUSEC:\PROGRAMA\ARQUIVOS\DBF\ESTOQUE.DBF,vejacomoaSQL LIBirinterpretarestavalor,dependendodeSETTRANSLATE: Valor


tpFileName

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>

EspecificaotipodeconversoaplicadaaoNOME deumarquivo. Atabelalistatodos ospossveisvalorespara<nMode>: Valor


tcNone

Descr ioeexemplo Noefetuaconversoalgumaouseja,onome digitadoprocessadodomodocomodigitado. EsteopadrodaSQLLIB.

tcUpperCase tcLowerCase

Convertetodososcaracteresparaletrasmaisculas. Convertetodososcaracterespassadosparaletras minsculas.

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>

Representaumnmeromaiorque2e de preferncia menorque1000.

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>

Representaumnmeromaiorque2e de preferncia menorque1000.

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>

Apenasmarcaoregistrocomodeletado,masoregistrocontinuaapermanecer natabelaatqueumRECALLsejadadoouelesejacompletamenteremovido pelocomandoPACK.

Consultetambm:
SQL_FULLDELETE()

11. SQLFILTER
Defineumfiltroparaatabelaatual,quedeverserprocessadonoladodoservidor.Ousodestetipo dendicemaisrecomendadodoqueousodeSETFILTER. Sintaxe:
SQLFILTERTO[<cSQLFilter>]

Onde:
<cSQLFilter>

aexpressoquedefinirofiltroativoparaatabelaatual.Seumastringvazia forpassadacomoparmetro,ofiltroatualserremovido.

SesomenteSQLFILTERTO forespecificadosemexpressonenhuma,ofiltroatualserremovido. Exemplo:


demos\filtros.prg

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.

Notaimportante:estafunocopia apenas aestruturaeosdadosparaanovatabelanoincluindo triggers,viewseoutrosobjetosvinculadostabelaoriginal.

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.

Ateno: Estecomandonoestsujeitoa um ROLLBACK.


Consultetambm:
DELETEINDEX RENAMETABLE COPYTABLE

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.

Ateno: Estecomandonoestsujeitoa umROLLBACK.


Consultetambm:
DELETETABLE

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

Estecomando antes definalizar atransao,enviaumCOMMITTRANSACTION explcitoparaevitara percadedados. Poristo,casodesejecancelarumatransao,envieumROLLBACKantesde finalizaratransaocomENDTRANSACTION. Consultetambm:


COMMITTRANSACTION ROLLBACKTRANSACTION BEGINTRANSACTION

19. COMMITTRANSACTION
Gravatodasasalteraesfeitasdentrodeumblocodetransaes,masnoafinaliza. Sintaxes:
COMMITTRANSACTION SQLCOMMIT

Consultetambm:
ROLLBACKTRANSACTION BEGINTRANSACTION ENDTRANSACTION

20. ROLLBACKTRANSACTION
Descartatodasasalteraesefetuadasnoblocodetransaoatualemtodasastabelasenvolvidas, masnofinalizaoblocodetransaes. Sintaxe:
ROLLBACKTRANSACTION SQLROLLBACK

AoseefetuarumROLLBACKnumblocodetransao,todasastabelasenvolvidasnestaoperao teroosseusregistrosatualizadoscomGOTORECNO(),parasecertificardequeosdadosatuais soosmaisrecentesdo bancodedados. Consultetambm:


BEGINTRANSACTION COMMITTRANSACTION

21. CLEARINDEXES
SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.

Pg.23

Limpatodososndicesanexadostabelaatualou umaoutratabelaespecficanoservidor. Sintaxe:


CLEARINDEXES[FOR <table>] CLEARINDEXES[FROM<table>]

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

SELECTSCHEMApublic USEvendedoresNEWVIAPGSQL //Abreatabelapublic.vendedores SELECTSCHEMAvendas USEpedidosNEWVIAPGSQL

//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

Sendoassimcompoucosajustes,possvelmigrarumsistemainteiroparaSQL.Desdeque faamosumbomusodasrotinasadequadasdaSQLLIB. Consultetambm:


SETTRANSLATEPATH SQLTRANSLATECASE USESQL

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]

OndeamaioriadosparmetrosmantmaformatradicionaldocomandoUSE,excetopor alguns novos:


<cSQL> <conn>

ocomandoSQLaserexecutadonoservidor o numero da conexo especfica para utilizada para enviar o comando SQL paraoservidor onomedoRDDqueiroretornodestecomandoSQL.Consulteocomando USEparaobterumatabelacomtodososnomesdeRDDsdisponveis.

<rdd>

OcomandoUSESQL importanteparaexecutarcomandosnoladodoservidorqueretornemdados especficos,porexemplo:dadosparaumrelatrio,umalistadeusuriosconectadosou obterovalor de retornode umaStoredProcedure.

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>

Paraobterumalistacompletados valorespara<nStyle>, verifique areferncia ao comandoSQL TRANSLATEPATHnesteguia. Exemplo:


SQLParseStyle(tpFullNamePath)

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>

astringcontendoonomedoarquivoaserconvertido. umparmetroopcionalqueindicaotipodeconversoaseraplicada.Seno forespecificadoovalordeSQLPARSESTYLE()serassumidocomopadro. onomedoarquivoespecificadoem<cFileName>convertidoeformatado.

<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>

<cUser> <cPwd> <nFlags>

<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>

Especifica o nmeroda conexoque se deseja finalizar, se omitido aconexo atualserfechada.

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

?SQLGETCONNECTION() //RetornaomesmovalordenMySQL ?SQLGETCONNECTION("POSTGRESQL")//RetornaomesmovalordenPostSQL ?SQLGETCONNECTION("MYSQL")//RetornaomesmovalordenMySQL ?

Consultetambm:
SQLSETCONNECTION() SQLGETCONNECTIONS()

8. SQLSETCONNECTION()
AlteraonmerodaconexoatualmenteemusopelaSQLLIB.Estafunopossuioutrosnomes comoSQLSETCONNECT()e SQLSETCONN(). Sintaxe:
SQLSETCONNECTION(<nHandle>)>lSuccess

Onde:
<nHandle> lSuccess

onmeroda novaconexoquedeverserdefinidacomoativa. umvalorderetornolgicoindicandoseaalteraofoiefetuadacomsucesso.

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>

um array multidimensional contendo informaes sobre as conexes ativas registradaspelaSQLLIB.

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

um array multidimensionalcomas informaes da conexo ou NIL se nada forencontrado.

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>

onmerodaconexoquesedesejaobterinformaes.Seesteargumentofor omitidoaconexoativaserassumida. onomedodriverinternodaSQLLIBqueestgerenciandoestaconexo.

<cRddName>

SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.

Pg.36

ParaumatabelaabertacomPostgreSQLporexemplo,estafunoretornarPGSQL,jparauma conexoMySQLretornarMYSQLeassimpordiante. Consultetambm:


SQLGetConnectionInfo()

12. SQLERRORMSG()
Retornaumastringrepresentandoaltimamensagemdeerro obtida(sehouver) duranteuma operaointernadaSQLLIB. Sintaxe:
SQLErrorMsg()>cMsg

Onde:
<cMsg>

Representaastringcontendoaltimamensagemdeerrogerada.

Vejaumexemplodetalhadoem SQLERRORNO(). Consultetambm:


SQLERRORNO()

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

cConn:="Driver=MySQLip=192.168.0.1usuario=rootbanco=test" SQLCONNECTcConnINTOnMySQL SQLExecute(INSERTINTOCLIENTES(nome,salario,aniv)VALUES($1,$2,$3), {JoseMatias,2500.00,CTOD(10/05/1965)},nMySQL)

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)

Exemplo2(PostgreSQL com parmetros):


/* *TestaseatabelaCLIENTESexistircdigoemPostgreSQL: */ SQL:="SELECTtablenameFROMpg_tablesWHEREtablename=$1" Arr:=SQLArray(SQL,{CLIENTES}) ifEmpty(Arr) ?Tabelanaoexiste! else ?Tabelaexisteservidor! endif

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.

Lembrandoque ousodestafunoapenasnecessrio, caso vocno estejautilizandonenhum dosparsersinternosda SQLLIB.


VejamaioresdetalhesemSQLNULLDATE()sobre quandoaplicarestetipodefuno.

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>

o nmero de linhas atualizadas / deletadas / inseridas pelo ltimo comando SQLenviadoaoservidor.

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

Estafunotilpara seefetuarvalidaesdoladodoservidor imagineaseguintesituao:

Um aplicativo possui uma tabela de clientes e outra de pedidos, que vinculada aos clientes.Estemesmoaplicativo,podedeixarparaousurioaopodeseEXCLUIR umitemdocadastrodeclienteseestecomando,efetuariaumDBDELETE()noregistro selecionadodestatabela.

Noteo pontoimportanteagora: Oservidor SQL poderecusarestaoperaodeexcluso


sejhouverumachaveestrangeiravinculadanestatabela,porexemplo.

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

Tipodocamporepresentado pelaprimeiraletra: CHAR(texto) NUMERICO DATA LGICO MEMO

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

AAdd(aStru,{"cpf","c",21,0,.T.,.T.}) *Camposcomformataonormal AAdd(aStru,{"civil","c",1,0}) AAdd(aStru,{"obs","m",10,0}) AAdd(aStru,{"cadastro","d",10,0}) DBCreate('test6',aStru)

ApartirdaSQLLIB v1.3,doisnovoscomandospersonalizadosforamintroduzidoscomointuito deajudaraoprogramadornamontagemdoARRAYcorretoparaDBCreate().Elesestodefinidos dentrodoarquivoSQLLIB.CHeoexemplo2abaixo,demonstraasuafacilidade: Exemplo2(mesmoresultadodoexemplo1,pormcomalgumasregrasdevalidaoadicionais):


/* *Mesmoexemplodecamposacima,utilizandoa *sintaxecomosnovoscomandosintroduzidosnaSQLLIB. */ aCampos:={} SQLADDFIELD"KEY"TYPEINTEGERINTOaCampos SQLADDFIELD"Codigo"NUM(10)PRIMARY_KEYAUTO_INCINTOaCampos SQLADDFIELD"Nome"CHAR(25)DEFAULT""NOTNULLINTOaCampos SQLADDFIELD"Endereco"CHAR(40) INTOaCampos SQLADDFIELD"CPF"CHAR(21)NOTNULLUNIQUEINTOaCampos SQLADDFIELD"Civil"TYPE"ENUM('Casado','Solteiro')" NOTNULLDEFAULT'Solteiro'INTOaCampos SQLADDFIELD"OBS"MEMO(10) INTOaCampos SQLADDFIELD"Cadastro"DATE(10)DEFAULTDate()INTOaCampos DBCreate('test7',aCampos)

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

um valor lgico indicando se um ou mais arquivos foram encontrados no servidor. EstafunofazusodoSCHEMAatualparaefetuarapesquisa.

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

um valor lgico indicando se um ou mais arquivos foram encontrados no servidor.

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

?tag(nome,clientes.cdx) ?tag(fone,clientes.cdx) ?tag(ende,clientes.cdx)

//Result:.T. //Result:.F. //Result:.T.

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

/* *TudoOk!Usamosagoraobancodedadoscorreto=D */ SQLCONNECTON'192.168.0.1' PORT3306 DATABASE'sistema' USER'postgres' PASSWORD'sql' LIB'PostgreSQL'

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>

onomedatabelaouviewquesedesejaduplicar. onomedanovatabelasequedesejacriarcomosdadosdatabelaoriginal. Casoestatabelajexistanoservidor,elaserapagadaeumanovasercriada comaestruturaigual<cSource>,demodoquenenhumerrosergeradopela

SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.

Pg.52

SQLLIB. Notaimportante:estafunocopia apenas aestruturaeosdadosparaanovatabelanoincluindo triggers,viewseoutrosobjetosvinculadostabelaoriginal. Consultetambm:


SQLRENAMETABLE()

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

onomeatualdatabelaexistentenoservidor onovonomequeserdadotabela. umvalorlgicoindicandoxitoounonaexecuodocomando.

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

onomeatualdatabelaexistentenoservidor onovonomeque deverserrepaadoaondice umvalorlgicoindicandoxitoounonaexecuodocomando.

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>

onomedatabelaexistentequeseratualizada. umarraycomanovaestruturaparaatabela,esteparmetropossuiomesmo formatodoarray utilizadoporDBCREATE()respeitandoasseguintesregras:

Casoumcampoexistaem<aStruct> ,masaindanoexista natabelaser


criado.

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

umvalorindicandose ousodendicescustomizadospermitidoouno. Valorlgicoindicando ostatusatualdestafuno.

ConsulteoapndiceAparaobtermaioresinformaesdetalhadassobrecomotrabalharcomndices naSQLLIB. Exemplo:


demos\index.prg

38. SQLBEGINTRANS()
Iniciaumanovatransaoemtodasasconexesatualmenteabertaseincrementaocontador de transaesem+1. Sintaxe:
SQLBeginTrans()>nil

Considerearefernciaaocomando STARTTRANSACTIONnesteguiaparaumaexplanaomais completasobreousodetransaesdentrodaSQLLIB:

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

algoritmoabaixo: Sehouveralgumarquivoabertonareaatualeseeleforumatabelaaberta comaSQLLIB,utilizeeconexodestatabela . Casocontrrioaconexoatualserassumida.


xResult

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

#include'sqllib.ch' cls //Listatodasastabelasregistradasnoservidor ?ToString(SQLGetables(nil,)) //Listatodasastabelasregistradasnoservidorquecomee //comaexpressoclie* ?ToString(SQLGetables(nil,clie*)) ? wait

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>

onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. umparmetroopcionalqueespecificaumfiltroaseraplicadonalistagema serretornada. Podeseutilizaroasterisco*comocuringaparaofiltro.

<cMask>

aResult

Umarraycontendoosnomesdetodososndicesencontrados.

Consultetambm:
SQLGETTABLES() SQLGETINDEXES() SQLGETDBINFO()

47. SQLGETUSERS()
RetornaumalistacontendotodososusurioscadastradosnoservidorSQL. Sintaxe:
SQLGetUsers([<nConn>])>aResult

Onde:
<nConn>

onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. Umarraycontendoosnomesdetodososusurioscadastradosnoservidor.

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

NomedousurioeIP(ounomedaCPU)deondeousurioestconectado Nomedobancodedadosatualmenteconectado Portaqualeleestconectado ComandoSQLatualmenteemexecuoporesteusurio(quandodisponvel) Consultetambm:


SQLGETUSERS() SQLGETDBINFO()

49. SQLSERVERVERSION()
RetornaumastringcontendoonomeeaversodoservidorSQLdaconexosolicitada. Sintaxe:
SQLServerVersion([<nConn>])>cVersion

Onde:
<nConn>

onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. umastringcontendoonomeeaversodoservidorSQL.

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>

onumerodaconexocomoservidorasertestada,seomitidoassumidoa conexoatual. ahoraatualdocomputadorondeoservidorSQLestemexecuonoformato HH:MM:SS.

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

AfunoSQLSTR()adicionaaspassimplesnoinicioenofinaldastringpassadacomoargumento e,casooparmetro<nSystemID>sejaespecificado,astringserenviadaparaodrivergerenciador daconexocorrespondenteafimdesercodificadaparaumastringSQLcomescape.

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>

ovalordequalquertipo (excetoCODEBLOCK)quesedesejaconverter umvalorlgicoindicandoseastringpodeserformatadaparasadanovdeo, oquegeralmenteincluiquebrasdelinhasealgunsoutrosdetalhesparamelhor visulizaodainformaoporpartedousurio. UtilizeesteparmetrocomoFALSOcasodesejegravarovalorderetornodesta funoemumatabela/campo.Seomitido.T.assumido.

cValue

astringrepresentandoainformaocontidaem<xValue>emformatostring.

Estafunofoiconcebidacomointuitodeforneceraoprogramadorummododegravaremtabelas SQLdadosque normalmente elenoconseguiriataiscomoarrayseobjetos.


NaatualimplementaodeTOSTRING(),apenasosuporteavariveisdotipoobjetoaindanoest concludo.Estamostrabalhandoparajnasprximasversesfinalizarmosesteajuste.

Exemplo1:
/* *Iremosdepurarovalordeumavarivel */ aFiles:=directory(*.*)

?existem,len(aFiles),arquivosnestediretorio Wait ?Eisosarquivosencontrados: ?ToString(aFiles) wait quit

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

USEvendedoresNEWVIAMySQLALIASven USEprodutosNEWVIADBFCDXALIASpro USEclientes NEWVIAPgSQLALIAScli //Result.T.foiabertocomMySQL //Result.F.foiabertocomdbfcdx //Result.T.foiabertocomPostgres

?ven>(SQLLIB()) ?pro>(SQLLIB()) ?cli>(SQLLIB())

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.

O arquivo SQLLIB.CH contm todas as definies das constantes mencionadasnatabelaacima.


<nConnection>

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>

onomeepathdoarquivo.SQLqueserrestaurado. umvalorlgicoindicandoseumobjetoquejexistenobancodedados deveserexcludoaoseexecutaroscriptdecomando.

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

Tenhasemprecerteza absoluta deosparmetrospassadosparaestafunosorealmentevlidose tomecuidadopoisestarotinaseexecutadaemumaconexodiferentedadesejadapoderacarretar empercadedadosimportantes!

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>

umaarraycontendoosnomesdastabelase/ouviews,paraseefetuarcpia deseguranaouapenasumastringcontendoonomedeumanicatabelaou viewparabackup. Podeseutilizaroasteriscocomocaractercuringaparaseprocessarobackup demaisdeumatabelaaomesmotempo.

<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

/* *Efetuaobackupdeduastabelas */ SQLBackupStart('backup.sql') SQLBackupTable('clientes') SQLBackupTable('fornecedores') SQLBackupEnd()

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

cConn:="PostgreSQL=192.168.0.1usuario=postsenha=postbanco=Demos" SQLCONNECTcConnINTOnPostSQL SQLSchema(public) USEvendedoresNEWVIAPGSQL //Abreatabelapublic.vendedores SQLSchema(vendas) USEpedidosNEWVIAPGSQL

//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

oponteiroretornadopor_SQL_GETPOINTER() NmeronicoqueidentificaodriverutilizadopelaSQLLIBparagerenciaresta tabelarepresentadapor<nPointer>

Consultetambm:
_SQL_GETPOINTER() _SQL_SYSTEMIDSTR()

70. _SQL_SYSTEMIDSTR()
RetornaumastringrepresentandoodriverIDdopointerpassadocomoargumento. Sintaxe:
_SQL_SYSTEMIDSTR(<nPointer>)>cSystemID

Onde:
<nPointer> cSystemID

oponteiroretornadopor_SQL_GETPOINTER() String identificandoodriverutilizadopelaSQLLIBparagerenciarestatabela

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

oponteiroretornadopor_SQL_GETPOINTER() onomenatabelanoservidoraoqualestareaestvinculadaouasterisco* casoestareasejaabertacomUSESQL.

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

APNDICEB Dicasdeper for mance


possvelaumentarodesempenhodeaplicativosescritoscomaSQLLIBobservandosealgumas dicassimples. DICAn1: Ao se inserirdiversosregistros, possvel ganhar performancealterandopoucas linhas no sistema,procedaassim:
/* *Incluaoscomandosdentrodeumblocode *transaoparaganhardesempenho */ ?'puxandodados' BEGINTRANSACTION appendfromtest.dbfvia'DBFNTX' ENDTRANSACTION /* *Omesmovalesevocpossuirvrioscomandosde *gravao.Comonesteexemplo: */ BEGINTRANSACTION SELECTTEST GOTOP WHILE!Eof() SELECTTESTSQL APPENDBLANK REPLACECODWITHTEST>COD REPLACENOMEWITHTEST>NOME REPLACEANIVWITHTEST>ANIV REPLACEBLOQWITHTEST>BLOQ REPLACELIMCWITHTEST>LIMC REPLACEULTCWITHTEST>ULTC REPLACEATIVWITHTEST>ATIV COMMIT SELECTTEST SKIP End ENDTRANSACTION

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

OmesmovaleparaocomandoSETRELATIONquesepossveldevesersubstitudopela funoORDSCOPE(). Seguindoseestassugestessimples,vocobteromximodedesempenhoemseuaplicativo.

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.

o CliqueemPROJETO>PROPRIEDADESajaneladeOpesdoprojeto semelhanteimagemacimairseabrir. o CliqueemCONFIGURARCOMPILADORESSELECIONADOSconforme destacadoem verdenaimagemacima. o NaseqnciadeixeaopoSQLLIBantesdasLIBdoFW(destacadoemvermelho acima)setadocomoSIM. o Salveasalteraesecompileseuprojeto.

SQLLIBRDDparaHarbour&xHarbour,20032006porVailtonRenato renato@rdd.com.br.Todososdireitossoreservados.

Pg.85

Você também pode gostar