Академический Документы
Профессиональный Документы
Культура Документы
Vamos comear este novo milnio tratando de um assunto que creio vai interessar muita gente - Como localizar informaes usando a ADO . Antes de mais nada devo informar que estou usando a verso 2.5 da ADO . Quer saber qual verso da ADO esta instalada na sua mquina ? Use a ferramenta Component Checker (Comcheck.exe). Voc pode fazer o download no endereo http://www.microsoft.com/data/download.htm . O resultado final da execuo do Component Checker e mostrado abaixo:
Naturalmente quando falamos a nvel de dados (campos e registros) estamos tratando com o objeto Recordset . Vamos ento mostrar como encontrar dados especficos em um Recordset ADO. Lembrando que um objeto Recordset possui muitas funes teis. Dentre elas podemos citar as mais usadas: bookmark , Find , Seek , Filter , etc Usando Bookmarks (marcadores). Um bookmark de um recordset como um cursor que aponta para um registro especfico dentro do Recordset identificando-o de forma nica. Fazendo uma analogia , ao ler um livro voc no costumar usar um marcador para indicar em qual pgina parou ? Sim , voc pe o marcador na pgina para quando retornar a leitura localizar com rapidez onde parou a leitura. Assim funciona um bookmark. Para us-lo em um objeto recordset as etapas so: Defina uma varivel para ser usada como marcador : Dim marcador as variant Quando desejar marcar uma posio em um recordset no registro atual usando a varivel definida acima , faa: marcador=rs.bookmark Para retornar a posio marcada no item anterior faa: rs.bookmark=marcador Mas tome cuidado , pois nem todos os registros suportam bookmarks. Para verificar se um recorset suporta bookmarks use a seguinte instruo: blnmarcador = rs.Supports(adBookmark). Assim o mtodo Supports usando o argumento adBookmark retorna TRUE se o recordset suporta bookmarks e FALSE caso no suporte.
Exemplos de strings de busca: "FornecedorID >= 7" "DataPedido = #09/10/1997#" "Codigo > 7" "Nome = '" & variavel & "'" Lembrando que os valores strings devem vir entre aspas simples ('Joao') e as datas devem estar iniciadas e terminadas com o smbolo (#). SkipRows Define o deslocamento da linha atual ou o bookmark padro para iniciar a busca. O padro comear na linha atual e terminar na ltima linha searchDirection Indica a direo em que o recordset procurado. Os valores podem ser: adSearchForward ou adSearchBackward - A busca ir cessar no nicio ou no fim do recordset dependendo destes valores. Se a busca iniciada para frente e nada for encontrado o cursor do recordset definido para alm do ltimo registro e a propriedade EOF (End Of File) retorna TRUE. J se a busca feita para trs e nada for achado o cursor definido para alm do incio do arquivo e a propriedade BOF (Beginning OF File) retorna TRUE. start Define um bookmark de incio para a busca. OBS : Se voc no definir a posio do cursor na linha atual quando for iniciar a busca ir ocorrer um erro. Por isso antes de usar o mtodo Find voc pode mover o cursor para o inicio do arquivo usando o mtodo MoveFirst . Exemplo prtico: Vamos mostrar em um exemplo prtico como usar o mtodo Find. Inicie um novo projeto no VB e antes de qualquer coisa faa uma referncia a biblioteca ADO na opo do menu Project | References , como na figura abaixo:
'm ove -se para o prim e iro re gistro rst.Move First ' de fine o crite rio para busca crite rio = "C ountry Lik e 'A%'" ' inicia busca no re cordse t rst.Find criterio, 0, adSearchForward ' pe rcorre o re cordse t ate o se u final W hile Not rst.EO F De bug.Print rs("C om panyNam e ") m arcador = rst.Book m ark rs.Find crite rio, 1, adSe archForward, m arcador W e nd End Sub Vam os e x plicar passo a passo: 1-) Dim cnn As Ne w ADO DB.conne ction Dim rst As Ne w ADO DB.R e cordse t De fine as varive is obje tos usada para a cone x o e para o obje to R e cordse t 2-) Abre a cone x o cnn.O pe n "Provide r=Microsoft.Je t.O LEDB.3.51;Data Source =C :\te ste \Northwind.m db;" Abrim os um a cone x o usando o prove dor - Microsoft.Jet.OLEDB.3.51 e o Data Source - C :\te ste \Nortwind.m db 3-) Abre o R e cordse t rst.C ursorLocation = adUse C lie nt rst.O pe n "Se le ct * From Supplie rs", cnn, adO pe nKe yse t, adLock O ptim istic, adC m dTe x t De finim os o tipo de cursor usado , no caso usam os o cursor do lado do clie nte - AdUse C lie nt e abrim os um re cordse t com os parm e tros A dOpenKeySet - Pe rm ite a alte rao e adLockOptimistic - usa o bloque io pe ssim ista (m ant m o bloque io at usar o m todo para atualizar) 4-) ' de fine o crite rio para busca crite rio = "C ountry Lik e 'A%'" ' inicia busca no re cordse t rst.Find criterio, 0, adSearchForward De finim os o crit rio para busca e iniciam os a busca usando o m todo Find usando os parm e tros : sk iprows =0 , e adSe archForward - busca do nicio para o fim . 5-) W hile Not rst.EO F De bug.Print rs("C om panyNam e ") m arcador = rst.Book m ark rs.Find crite rio, 1, adSe archForward, m arcador W e nd Pe rcorre m os o re cordse t , im prim indo o cam po - CompanyName - e se posicionando a partir do book m ark ante rior com avano de um 1 re gistro para fre nte a partir do book m ark - marcador. Note que usam os o book m ark para arm aze nar a posio atual do re gistro e usam os e sta posio inicial para a prx im a busca.
Voc deve ter o cuidado de definir a propriedade Index assim que o Recordset for aberto para depois usar o mtodo Seek. A propriedade Index indica o nome do ndice que estar ativo. Assim , supondo que voc possua uma tabela chamada clientes e que queira fazer uma busca pela coluna Nome da tabela, vai precisar definir um ndice para esta coluna na tabela dando a ele um nome. O nome do ndice pode ser o mesmo nome da coluna . Para o nosso caso poderamos ter criado um ndice chamado Nome. (Voc poderia ter usado qualquer outro nome para definir o ndice.) Teriamos ento: rs.index = "nome " Em muitos casos quando voc usa um campo autonumerao no Access e define este campo como uma chave primria, o ndice PrimaryKey ser criado para esta coluna da tabela. Ento se for usar esta coluna para fazer uma busca usando o Seek , dever usar a sintaxe: rs.Index = "PrimaryKey" Depois que a propriedade Index foi definida para o nome do ndice existente na tabela, podemos usar o mtodo Seek para procurar na coluna desejada. Quando o mtodo seek encontrar o registro desejado o ponteiro ir se posicionar neste registro. Se nada for encontrado o ponteiro o ponteiro definido para EOF. A sintaxe a seguinte:
rs.Seek Array(ValordaColuna)
Aqui voc deve tomar cuidado. Como um ndice pode ser constitudo de uma ou mais colunas , o termo ValordaColuna - indica os valores da coluna. Vamos supor que voc quer tem uma tabela de clientes com um campo CodigoID definido como chave primria , que voc quer fazer procurar pelo cliente cujo cdigo seja igual 120. Voc dever procurar pelo valor 120 na coluna CdigoID e dever fazer:
Iremos usar o ndice chave Primria - CdigoDoFuncionrio - para localizar o funcionrio e exibir o seu nome. O projeto usar um formulrio , uma caixa de texto e um boto de comando ( ver figura abaixo).
Observe que antes de iniciar a busca verificamos se o provedor suporta a utilizao de Index e de Seek . Se o mtodo Supports novo para voc , vou dar uma canja.... Voc pode usar o mtodo Supports com as seguintes constantes: Constante
adA ddNew adA pproxPosition adBookMark adDelete A dHoldRecords adResync adUpdate adUpdateBatch
Utilizao
Verifica se novos registros podem ser adicionados Verifica se as propriedades: A bsolutePage e A bsolutePosition esto disponveis Verifica se podemos usar um marcador no Recordset Verifica se os registros podero ser excludos Verifica se podemos recuperar os registros sem submeter as alteraes Verifica se o mtodo Resynd esta disponvel Verifica se o conjunto de registros permite a atualizao Verifica se o recordset permite a atualizao em lote - via UpdateBatch
(terminei o artigo...)