dicas para MYSQL com ADORDD

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

dicas para MYSQL com ADORDD

Mensagem 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

010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

dicas para MYSQL com ADORDD

Mensagem 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
010011110010000001110011011101010110001101100101011100110111001101101111001000001110100100100000011000110110111101101110011100110111010001110010011101011110110101100100011011110010000001100001001000000110111001101111011010010111010001100101
01001101011000010111001001100011011011110111001100100000010000010110111001110100011011110110111001101001011011110010000001000100011001010010000001000010011011110110111001101001
0101010001100101011011000011101000100000001010000011001000110111001010010011100100101101001110010011100000110100001100110010110100110101001100100011100100110000
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

dicas para MYSQL com ADORDD

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

dicas para MYSQL com ADORDD

Mensagem 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
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

dicas para MYSQL com ADORDD

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

dicas para MYSQL com ADORDD

Mensagem 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)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

dicas para MYSQL com ADORDD

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

dicas para MYSQL com ADORDD

Mensagem 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 + "')"
[]´s
Alexandre Santos (AlxSts)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

dicas para MYSQL com ADORDD

Mensagem 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
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

dicas para MYSQL com ADORDD

Mensagem 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).
[]´s
Alexandre Santos (AlxSts)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

dicas para MYSQL com ADORDD

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

Editado pela última vez por Toledo em 27 Ago 2014 06:38, em um total de 1 vez.
Razão: Mensagem editada por solicitação do autor.
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

dicas para MYSQL com ADORDD

Mensagem por Mário Isa »

José Quintas disse:
direto no ADO
para fazer "direto no ADO" tem que ter a .LIB ??

:-´
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

dicas para MYSQL com ADORDD

Mensagem 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
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

dicas para MYSQL com ADORDD

Mensagem 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.
:(
Responder