terça-feira, 20 de novembro de 2012

AutoIt - Ligue para acessar bancos de dados - mdb & ACCDB Arquivos


Você já se perguntou como se conectar a partir do AutoIt para um banco de dados MS Access? AutoIt, para quem não sabe, é um programa para automatizar teclas e movimentos do mouse. Esta é em referência a um post no blog a respeito de um problema que eu tive para conexão com acesso a partir de AutoIt. Existem dois tipos de arquivos diferentes em MS Access 2007. Access 2003, 2000 e versão vai mais usar um tipo de arquivo mdb,. Que, Access 2007 pode usar accdb extensão de arquivo / tipo.. Vou mostrar um código básico que irá trabalhar com ambas as versões. Para este exemplo, eu só recupere um registro e um campo.

Primeiro vamos primeiro criar algumas variáveis ​​que armazenam o nome do arquivo de banco de dados (se mdb ou accdb..), O nome da tabela ea consulta para executar:

$ Dbname = "C: \ Users \ vk \ Documents \ db \ \ Marketing articleSubmissionsTutorialRef.mdb"
$ Tblname = "artigos"
$ Query = "SELECT * FROM" & tblname $ & "WHERE articleID = 4"

O & é simplesmente uma concatenação de strings.

Vamos definir a variável para o campo que queremos recuperar a partir do banco de dados.

Título $ local

Bastante simples, até agora, não é?

Em seguida, criar a conexão com o ADODB:

$ AdoCon = ObjCreate ("ADODB.Connection")

Em seguida, defina o provedor. Há um provedor diferente para cada extensão de arquivo. Uma. Mdb terá seu próprio provedor e um arquivo. Accdb terá outro.

Aqui é o provedor para um arquivo mdb.:

$ AdoCon.Open ("Driver = {Microsoft Access Driver (* mdb).}; DBQ =" & $ dbname)

Aqui é o provedor para accdb.:

$ AdoCon.Open ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & $ dbname)

Agora vamos criar o objeto Recordset, definir algumas opções necessárias e, em seguida, executar a consulta:

$ AdoRs = ObjCreate ("ADODB.Recordset")
$ = 1 adoRs.CursorType
$ AdoRs.LockType = 3
$ AdoRs.Open ($ query, $ adoCon)

Algumas notas sobre as propriedades CursorType e LockType. Eu precisava definir estes, a fim de recuperar o valor do campo especificado.

Definir o CursorType para um valor '1 'significa' adOpenKeyset '. CursorType é definido no MSDN como: "Define ou retorna um valor CursorTypeEnum O valor padrão é 'adOpenForwardOnly' Use a propriedade CursorType para especificar o tipo de cursor que deve ser usado ao abrir o objeto Recordset..." O adOpenKeyset é definida no site da Microsoft MSDN como: "usa um cursor de conjunto de chaves Como um cursor dinâmico, exceto que você não pode ver registros que outros usuários adicionar, embora as alterações dos registros que outros usuários apagar são inacessíveis a partir do seu conjunto de registros de dados por.. outros usuários ainda são visíveis ".

Curiosamente, quando eu tentei definir o CursorType para um valor de '2 ', que significa' AutoIt 'adOpenDynamic não pôde recuperar o valor do campo. Foi apenas em branco, mas não houve erro. 'AdOpenDynamic' é definida como: "usa um cursor dinâmico aditamentos, alterações e exclusões feitas por outros usuários são visíveis, e todos os tipos de movimento através do conjunto de registros são permitidos, exceto para os favoritos, se o provedor não oferece suporte a eles.".

LockType é definido como "Indica o tipo de bloqueios colocados em registros durante a edição. Define ou retorna um valor LockTypeEnum. O valor padrão é adLockReadOnly". Com o seu valor definido em '3 ', que indica' adLockOptimistic '. 'AdLockOptimistic' é "Indica bloqueio otimista, registro por registro. Profissional utiliza o bloqueio otimista, o bloqueio de registros somente quando você chama o método Update" o que é bom para nós deixá-lo naquele valor.

Então, basta colocar o resultado na variável $ title declarado anteriormente. Você pode usar qualquer uma das duas linhas seguintes. A primeira é a de recuperar o valor do campo de nome e o último é de recuperá-los por ordem numérica do campo. Essencialmente, é o número da coluna. Números de coluna começa em '0 '(ou seja, zero) e não '1' (isto é um). Então, se você quiser pegar o valor da terceira coluna, então você poderia usar o valor '2 '.:

$ Title = $ adoRs.Fields ("title") valor.

$ Title = $ adoRs.Fields (2) valor.

Feche a conexão a menos que você tenha uma razão específica para deixar sua conexão aberta:

$ AdoCon.Close

Em seguida, teste os resultados com o MsgBox ():

MsgBox (0, "teste", $ titulo)

Então, aqui está todo o código:

Título $ local
$ AdoCon = ObjCreate ("ADODB.Connection")
; $ AdoCon.Open ("Driver = {Microsoft Access Driver (* mdb).}; DBQ =" & $ dbname); Use esta linha se estiver usando o MS Access 2003 e inferior
$ AdoCon.Open ("Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & $ dbname); Use esta linha se estiver usando o MS Access 2007 e usando a extensão accdb.
$ AdoRs = ObjCreate ("ADODB.Recordset")
$ = 1 adoRs.CursorType
$ AdoRs.LockType = 3
$ AdoRs.Open ($ query, $ adoCon)
$ Title = $ adoRs.Fields ("title") valor;. Recuperar o valor pelo nome do campo
; $ Title = $ adoRs.Fields (2) Valor;. Recuperar o valor pelo número de coluna
$ AdoCon.Close
MsgBox (0, "teste", $ titulo)

Neste artigo, mostramos como se conectar a um Access 2007 ou 2003 banco de dados usando AutoIt. Este artigo descreve como recuperar um registro ou linha e apenas um campo. Em um artigo futuro, iremos descrever como recuperar vários registros em uma matriz....

Nenhum comentário:

Postar um comentário