Página 1 de 1

dicas para MYSQL com ADORDD

Enviado: 12 Jul 2013 23:59
por dbsh

Código: Selecionar todos


PROCEDURE Teste1( sServ, sDataBase, sTabela, sUser, sPass, sQuery, sAlias)

DEFAULT sServ TO "localhost"
DEFAULT sDatabase TO "soserv"
DEFAULT sUser TO "root"
DEFAULT sPass TO "root"
DEFAULT sAlias TO sDatabase

//query para excluir tabela se ela existir
sQuery := "DROP TABLE IF EXISTS `inigrupo`;"
USE (sDataBase) ALIAS inigrupo VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW

//query para criar a tabela
sQuery := "CREATE TABLE `inigrupo` (" ;
    + "  `id` int(11) NOT NULL AUTO_INCREMENT," ;
    + "  `grupo` varchar(30) NOT NULL," ;
    + " `descricao` varchar(100) NOT NULL," ;
    + "  PRIMARY KEY (`id`)," ;
    + "  UNIQUE KEY `grupo` (`grupo`)" ;
    + ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;"
USE (sDataBase) Alias inigrupo VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW

//query para incluir registro
sQuery := "INSERT INTO `inigrupo` (`id`, `grupo`, `descricao`) VALUES " ;
    + "  (1, 'USUARIO', 'configuracoes personalizadas do usuario')," ;
    + "  (2, 'MAQUINA', 'configuracoes personalizadas da maquina cliente TS')," ;
    + "  (3, 'SISTEMA', 'configuracoes geral do sistema');"
USE (sDataBase) Alias inigrupo VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW

//pode ignorar o campo auto_icrement
sQuery := "INSERT INTO `inigrupo` (`grupo`, `descricao`) VALUES " ;
    + "  ('SECAO_TS', 'configuracoes temporaria por secao, terminal service, ao fechar secao inicializa')," ;
    + "  ('TEMPORARIA', 'configuracoes temporaria por execucao, ao sair do sistema inicializa')," ;
    + "  ('OUTRAS', 'outras configuracoes, EX: cliente, fornecedor,...');"
USE (sDataBase) ALIAS inigrupo VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW

//recuperar id de campo auto_icrement, deve ser executado logo apos um insert
sQuery := "SELECT LAST_INSERT_ID() as last_id;"
USE (sDataBase) Alias ultimo_id VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW
? Field->last_id //ultimo valor do campo auto_increment

//visualizar todas tabelas de um DB
sQuery := "SHOW TABLES;"
USE (sDataBase) ALIAS todas_tabelas VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW

GO TOP
WHILE !Eof() 
    ? "ARQUIVO " + FieldGet(1)
    IF RecNo() % 20
        wait
        cls
    ENDIF
    skip
ENDDO

USE (sDataBase) ALIAS (sAlias) VIA "ADORDD" TABLE (sTabela) QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW

RETURN


dicas para MYSQL com ADORDD

Enviado: 15 Jul 2013 19:26
por dbsh

Código: Selecionar todos

//visualizar todos DB existente no MYSQL
sQuery := "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA;"
USE (sDataBase) ALIAS todas_tabelas VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW

GO TOP
WHILE !Eof() 
    ? "ARQUIVO " + Field->schema_name
    IF RecNo() % 20
        wait
        cls
    ENDIF
    skip
ENDDO

dicas para MYSQL com ADORDD

Enviado: 11 Dez 2013 13:52
por JoséQuintas
Não deixa de ser interessante.
Eu ainda fico na dúvida sobre a melhor forma de uso.
Já usei via ADORDD e direto no ADO.

Direto no ADO seria algo assim:

Código: Selecionar todos

cnConexao := CreateObject("ADODB.Connection")
cnConexao:ConnectionString := "sdhdfsdksdkfhds"
cnConexao:Open()
cnConexao:Execute( "INSERT INTO ..." )
rsMySql := cnConexao:Execute( "SELECT * FROM ..." )
DO WHILE .NOT. rsMySql:Eof()
   ? rsMySql:Fields( "CODIGO" ):Value
   rsMySql:MoveNext()
ENDDO
cnConexao:Close()
A parte mais chata continua sendo tratar campos com conteúdo NULL ( NULL no MySql = NIL no Harbour)
Pra quem não sabe, em um servidor SQL qualquer campo pode ser NIL.
Então, valor + 5 pode dar erro, porque valor no banco de dados pode ser NIL, o que é NADA, e não equivale a zero.

dicas para MYSQL com ADORDD

Enviado: 23 Ago 2014 22:09
por Mário Isa
Ao tentar conectar no banco deu a msg:
Error ADODB.Connection/0 S_OK: OPEN Arguments: ( [ 1] = Type: C Val: DRIVER={MySQL ODBC 3.51 Driver};server=meuip;database=nomedobanco;uid=nomedeusuario;pwd=senhadobanco)


eu fiz:

USE nomedobanco VIA "ADORDD" TABLE "nomedatabela" MYSQL FROM "IP" USER "nomedeusuario" PASSWORD "senhadobanco"

E eu sei que o banco que quero abrir é Mysql 5.1.

Alguém sabe se preciso setar o ADORDD para 5.1 e como faria isso ?

Mário

dicas para MYSQL com ADORDD

Enviado: 24 Ago 2014 12:17
por JoséQuintas
Aqui conecto normalmente com MySql 5.1 usando odbc 3.51 - mas direto, sem RDDADO.
Tá parecendo alguma coisa errada nos dados da conexão.

dicas para MYSQL com ADORDD

Enviado: 25 Ago 2014 20:06
por Mário Isa
utilizei o exemplo do colega acima :

Código: Selecionar todos

sQuery := "INSERT INTO 'nomedatabela' ('clienteid', 'nome') VALUES (74, 'USUARIO')"
USE nomedobanco VIA "ADORDD" QUERY (sQuery) MYSQL FROM "meuip" USER "usuariodobanco" PASSWORD "senhadobanco"
use
para tentar incluir o registro mas deu esse erro :


Error ADODB.Recordset/6 DISP_E_UNKNOWNNAME: OPEN Arguments: ( [ 1] = Type: C Val: INSERT INTO 'clientes' ('clienteid', 'nome') VALUES (74, 'USUARIO') [ 2] = Type: O Val: { TOLEAUTO Object })
Onde será q eu errei ?

Mário
´o)

dicas para MYSQL com ADORDD

Enviado: 25 Ago 2014 20:26
por JoséQuintas
Uma ferramenta interessante é o HeidiSql, que permite executar comandos SQL no banco de dados MySql.

Costumo usar:

Código: Selecionar todos

INSERT INTO TABELA ( CAMPO1, CAMPO2 ) VALUES ( 'string1', 'string2' )
Aspas Simples - delimitam string
Aspas Duplas - versões mais novas de MySql aceitam pra delimitar string
Apóstrofo - delimitam campos, nomes de tabelas, etc. - não confundir com string e aspas simples

Me pareceu que usou aspas simples para nomes internos do banco de dados, ao invés de apóstrofo.
E pensando bem, o erro também sugere isso: Type C Val, foi considerado Character/String
Ou... se é ADORDD, provavelmente o uso de aspas onde não deveria.

dicas para MYSQL com ADORDD

Enviado: 25 Ago 2014 22:44
por alxsts
Olá!
Mário Isa escreveu:sQuery := "INSERT INTO 'nomedatabela' ('clienteid', 'nome') VALUES (74, 'USUARIO')"
O problema está no nome da tabela e dos campos. Eles não vão entre aspas ou apóstrofos. O correto é isto:

Código: Selecionar todos

sQuery := "INSERT INTO nomedatabela (clienteid, nome) VALUES (74, 'USUARIO')"
ou

Código: Selecionar todos

LOCAL nCustID, cUserID

nCustID := 74
cUserID := "USUARIO"

sQuery := "INSERT INTO nomedatabela (clienteid, nome) VALUES (" + Ltrim(Str(nCustID)) + ", '" + cUserID + "')"

dicas para MYSQL com ADORDD

Enviado: 26 Ago 2014 19:26
por Mário Isa
fiz com

Código: Selecionar todos

sQuery := "INSERT INTO clientes (clienteid, nome) VALUES (74, 'USUARIO')"
Deu erro:
Error ADODB.Recordset/6 DISP_E_UNKNOWNNAME: OPEN Arguments: ( [ 1] = Type: C Val: INSERT INTO clientes (clienteid, nome) VALUES (74, 'USUARIO') [ 2] = Type: O Val: { TOLEAUTO Object })

Fiz com:

Código: Selecionar todos

sQuery := "INSERT INTO `clientes` (`clienteid`, `nome`) VALUES (74, 'USUARIO')"
Error ADODB.Recordset/6 DISP_E_UNKNOWNNAME: OPEN Arguments: ( [ 1] = Type: C Val: INSERT INTO `clientes` (`clienteid`, `nome`) VALUES (74, 'USUARIO') [ 2] = Type: O Val: { TOLEAUTO Object })

Falta enviar algum parâmetro ??
:(Neg

dicas para MYSQL com ADORDD

Enviado: 26 Ago 2014 19:37
por alxsts
Olá!

Poderia mostrar um pouco mais do teu código? É possível que o problema esteja na forma como você está se conectando ao banco de dados. Poste o código de conexão (evite postar senhas).

dicas para MYSQL com ADORDD

Enviado: 26 Ago 2014 21:20
por Mário Isa
O início do código

Código: Selecionar todos

#include "memoedit.ch"
#include "Directry.ch"
#include "common.ch"
#include "inkey.ch"
#include "Fileio.ch"


#include "hbgtinfo.ch"

#include "Dbstruct.ch"
#INCLUDE "GTINFO.CH"
#INCLUDE "wingdi.ch"
#INCLUDE "winuser.ch"
#INCLUDE "COMMCTRL.CH"

#include "adordd.ch"



REQUEST HB_GT_WIN 



REQUEST HB_LANG_PT

REQUEST ADORDD

//--------------------------------------------------------->
Function Main(comofaz)
LOCAL oPop, oPart, aParts, oTIpMail, aEmails, i
public a_firma := {} , as_escolhida := {}
public is_conecstoq := is_conecshop := .f.
public ctahora := seconds() , ctapara := seconds() , ctarastro := -10000
//                    h         t      t        p       d         o       c         s
public oresftp := 'resulftp.txt'
public is_conectado := .f.

public vai_faz_bak := .t.


ambiente()


public qq_compacta :='rar'


crlf := chr(13)+chr(10)

qq_descompacta := 'rar'

set(39,159)

set conf on
set date brit
set epoch to 1950
set deleted on
set century on
set exact on
set exclusive off

cores()

*-**-*
altd()

testesql()

.
.
.
.


A função testesql()

Código: Selecionar todos

function testesql()



wait "aguarda"
altd()



//sQuery := "SHOW TABLES;"

/*USE (sDataBase) ALIAS todas_tabelas VIA "ADORDD" QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW*/

/*USE isashop1 ALIAS tessql VIA "ADORDD" TABLE "clientes" MYSQL FROM "meuip" USER "nomedousuario" PASSWORD "senha" NEW
locate for clienteid = 54*/

/*USE (sDataBase) ALIAS (sAlias) VIA "ADORDD" TABLE (sTabela) QUERY (sQuery) MYSQL ;
    FROM (sServ) USER (sUser) PASSWORD (sPass) NEW*/

//sQuery := "INSERT INTO 'clientes' ('clienteid', 'nome') VALUES (74, 'USUARIO')"

//sQuery := 'INSERT INTO clientes (clienteid, nome) VALUES (74, "USUARIO");'

//sQuery := "INSERT INTO `clientes` (`clienteid`, `nome`) VALUES (74, 'USUARIO')"

USE nomedobanco  VIA "ADORDD" QUERY (sQuery) TABLE ("clientes") MYSQL FROM "meuip" USER "nomedousuario" PASSWORD "senha"
use
   USE nomedobanco VIA "ADORDD" TABLE "produtos" MYSQL FROM "meuip" USER "nomedousuario" PASSWORD "senha"
browse()

   //locate for id = 68 // funcionou muito bem


   //Browse()

   //USE
   quit

/*   USE test00 VIA "ADORDD" TABLE "ACCOUNTS" MYSQL ;
      FROM "www.freesql.org" USER "myuser" PASSWORD "mypass"

   Browse()

   USE*/
   
return .t.


dicas para MYSQL com ADORDD

Enviado: 26 Ago 2014 21:23
por Mário Isa
José Quintas disse:
direto no ADO
para fazer "direto no ADO" tem que ter a .LIB ??

:-´

dicas para MYSQL com ADORDD

Enviado: 26 Ago 2014 21:28
por Mário Isa
Agora eu descobri que, apesar de dar o erro, ele chega a incluir os dados no banco.
veja:
73 23/08/2014 Cicero Tovani email@hotmail.com 1234
74 USUARIO

Logo abaixo do cliente 73 ele incluiu o 74.

Mas persiste o erro.

Mário

dicas para MYSQL com ADORDD

Enviado: 26 Ago 2014 22:50
por Mário Isa
De qualquer forma, até onde pude entender, toda instrução SQL termina com ";"
sendo assim esta funcionou para inserir o registro:

Código: Selecionar todos

sQuery := 'INSERT INTO clientes (clienteid, nome) VALUES (74, "USUARIO");'
apesar de ainda dar o erro no final, com esta instrução ele chega a incluir o registro.

Meus progressos:
Consegui fazer isso:

Código: Selecionar todos

   USE nomedobanco VIA "ADORDD" TABLE "nomedatabela" MYSQL FROM "meuip" USER "usuariodobanco" PASSWORD "senhadobanco"
dbgoto(5) //fui para o registro 5
replace preco with "259,90" //gravei o campo preco como "259,90"
altd()
use // fechou o banco
Mas na hora do
append blank
:(Neg
O programa parou de funcionar.
:(