DICAS DO HAMILTON Uso de consultas SQL com o controle Data. Banco de Dados em Run Time: Criação de Banco de Dados Criação de Tabelas e Campos Criação de Indices Criação de Relacionamentos Forms SQL: Like e Top Dicas de Livros Uso de consultas SQL com o controle Data A consulta SQL facilita economiza muito tempo, acho que depois de aprender a lidar bem com ela dificilmente voltamos ao antigo FindFirst. Tenho recebido alguns mails pedindo explicação de como se usar SQL com controles Data. Isso se faz pela propriedade RecordSource. Simplesmente é só você colocar a string da consulta no lugar de apenas escolher o nome da tabela. Exemplo: Sub Botao1_Click() Dim NomeCliente as String NomeCliente = InputBox("Entre com o nome do cliente:","Consulta") NomeCliente = "'" & NomeCliente & "'" Data1.RecordSource = "Select * from [Tabela de Clientes] where NomedoCliente = " & NomeCliente Data1.Refresh End Sub Banco de Dados em Run Time Esta dica ajuda muito quando se tem que criar banco de dados temporarios. São todos métodos de uso quando existe uma referencia a DAO (Data Access Objects) 3.0. Criação de Banco de Dados Este método é aplicado ao objeto Workspace, ele cria um banco de dados e o salva no disco. Sua sintaxe é: Set ObDataBase = ObWorkspace.CreateDatabase(, [, ] ) Exemplo: Dim Banco as Database Set Banco = DBEngine.Workspaces(0).CreateDatabase(App.path & "\Clientes.mdb", dbLangGeneral, dbVersion30) onde: 1.dbLangGeneral é uma constante do VB que indica que o ordenamento de strings será compativel com a lingua portuguesa. 2.dbVersion30 indica a criação de um banco de dados compativel com o MS-Access 95. Criação de Tabelas e Campos Para se criar uma tabela, as seguintes condições são exigidas: 1.Uma referencia ao objeto Database, se este não existir deve então ser criado, caso contrario aberto; 2.Um objeto TableDef; 3.Objetos Fields de acordo com o numero de campos a serem criados; 4.Anexação dos objetos Field a coleção TableDef; 5.Anexação do objeto TableDef a coleção Database. Sintaxe do método CreateTableDef: Set ObTableDef = ObDatabase.CreateTableDef([[, [, ]]]) Sintaxe do método CreateField: Set ObField = ObVariavel.CreateField([ Observe a estrutura da tabela abaixo: Campo Propriedade Valor NomeCliente Name NomeCliente Required True Type dbText CódigoCliente Name CodigoCliente Required True Type dbInteger AllowZeroLength False Baseado nessa estrutura o seguinte código criaria essa tabela: Nota: Se supõe aqui que o banco de dados exista. Dim Banco as Database Dim Tabela as TableDef Dim NomeCliente, CodigoCliente as Field ' abre o banco de dados Set Banco = DBEngine.Workspaces(0).OpenDatabase(App.path & "\Clientes.mdb") ' cria um objeto TableDef ' o nome da tabela nesse caso será Clientes Set Tabela = Banco.CreateTableDef("Clientes") ' cria os objetos Field para os campos Set NomeCliente = Tabela.CreateField() Set CodigoCliente = Tabela.CreateField() ' propriedades do campo ' note que o campo ainda não foi para a tabela NomeCliente.Name = "NomeCliente" NomeCliente.Required = True NomeCliente.Type = dbText CodigoCliente.Name = "CodigoCliente" CodigoCliente.Require = True CodigoCliente.Type = dbInteger CodigoCliente.AllowZeroLength = False ' anexa os campos a tabela Tabela.Fields.Append NomeCliente Tabela.Fields.Append CodigoCliente ' anexa a tabela ao objeto Database Banco.TableDefs.Append Tabela O método usado para anexar os campos a tabela e esta ao objeto Database foi o Append. Sintaxe: Coleção.Append Criação de Índices Este método tambem é aplicado ao objeto TableDef. Sua sintaxe é: Set ObIndex = ObTableDef.CreateIndex([]) Um pequeno exemplo da utilização do método CreateIndex: Set Primario = Tabela.CreateIndex("PrimaryKey") Primario.Primary = True Primario.Unique = True Primario.Required = True Tabela.Indexes.Append Primario Criação de Relacionamentos O método CreateRelations as vezes pode parecer complicado pois o mesmo tem muitas propriedades que devem ter seus valores escolhidos com um bom critério para obter um resultado satisfatório. Este método faz referencia ao objeto Database. Sua sintaxe é: Set ObRelation = ObDatabase.CreateRelation([[, [, [, ]]]) Propriedades Propriedade Descrição Table Tabela origem ForeignTable Tabela dependente Attributes Atributos como o tipo do relacionamento, integridade referencial. Um exemplo da utilização do método CreateRelations aplicavel ao objeto Database: Dim Relacao as Relation Dim CampoComum as Field Set Relacao = Banco.CreateRelation("ProdFornecedor") Relacao.Table = "Produtos" Relacao.ForeignTable = "Fornecedor" Relacao.Attributes = dbRelationCascade Set CampoComum = Relacao.CreateField("Produto") CampoComum.ForeignName = "Produto" Relacao.Fields.Append CampoComum Banco.Relations.Append Relacao Forms Algumas dicas para se usar o form: 1.Se estiver usando banco de dados, prefira o evento Activate ao Load. Com isto o form se constroe enquanto executa os eventos relacionados ao banco de dados. 2.Utilize os wizards do VB 5 quando quiser poupar tempo, alem disso, após o form criado você pode alterar o que quiser nele. SQL: Like e Top Like Um dos operadores de SQL pouco conhecidos e muito util é o like. Ele funciona como um igual só que tambem considera verdadeiro alguns criterios especificados. Exemplo 1: Suponhamos que uma consulta é feita com um Inputbox, mas o usuario não é obrigado a lembrar o nome inteiro do cliente. Dim Con, SQLString as String Con = Inputbox("Entre com o nome do cliente:","Consulta") Con = "'" & Con "*'" SQLString = "Select * from Clientes where NomeCliente like " & Con Neste exemplo, após os valores entrados a SQLString ficaria assim: Select * from Clientes where NomeCliente like 'Carlos*' Esse * funcionaria como "tudo" então a consulta retornaria todos os registros que tivessem o primeiro nome Carlos, não importanto o sobrenome. Você pode tambem utilizar outros parametros como: Exemplo 2: Select * from Clientes where NomeCliente like '[A-D]*' Select * from Clientes where NomeCliente like '[!F-J]*' A primeira faria com que a consulta retornasse todos os clientes que os nomes começem com as letras de A a D, como Arnaldo, David, Bruno. A segunda faria com que a consulta retornasse todos os clientes que os nomes não começem com as letras de F a J. Top Top é um predicado muito interessante e fácil de ser usado. Ele retorna um certo numero de registros que concordem com o critério e sejam ordenados pelo Order by. Exemplo 1: Select Top 5 * from [Produtos] order by PrecoProd Desc Esse exemplo mostraria os cinco produtos mais caros da tabela Produtos. Exemplo 2: Select Top 5 * from [Produtos] order by PrecoProd Asc Esse exemplo mostraria os cinco produtos mais baratos da tabela Produtos. Livros: Um dos poucos livros técnicos que são indispensaveis para quem quer trabalhar com banco de dados e já tem um conhecimento básico do assunto é o Visual Basic 4 for Windows 95 Database Know-How. O autor é Marco Antônio Gutierrez, e a editora é a Axcel Books.