PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → DRIVER NATIVO MULTILINK DATABASE WX SOLUÇÕES - MANUAL
DRIVER NATIVO MULTILINK DATABASE WX SOLUÇÕES - MANUAL
Débuté par Boller, 24 oct. 2024 14:43 - 29 réponses
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 14:43




DRIVER NATIVO MULTILINK DATABASE WX SOLUÇÕES - MANUAL

O MultiLink, suporta conexão nativa com diversas bases de dados. Aqui

Servidor Microsoft SQL (MSSQL)
Microsoft LocalDB (MSLocalDB)
MySQL
MariaDB
PostgreSQL
Oráculo
Pássaro de fogo
SQLite
SAP HANA
Sybase
DB2 (IBM)
DBISAM
Servidor de banco de dados Advantage (ADS)
Teradata
Topspeed (.TPS)
Redis

Em breve mais novos bancos de dados...

Essas bases são suportadas por meio de aulas especializadas dentro da biblioteca, como as que foram descritas e memorizadas. Cada uma dessas classes oferece métodos para configurar, conectar, executar comandos SQL, gerenciar transações.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:17
Aqui está a lista de configurações do MultiLink , com base

1. CONFIGURAR
Este método é utilizado para configurar a conexão com base de dados ou serv

Parâmetros Gerais:
##############
string server: O endereço do servidor de banco de dados.
int port: A porta de comunicação com o banco de dados (se aplicável).
string user: O nome de usuário para autenticação no banco de dados.
string password: A senha do usuário para autenticação.
string database: O nome do banco de dados (schema) será utilizado.
bool ssl: Indica se a conexão deve usar SSL (aplicável a certos bancos).
string fileName: Para bases de dados fundamentadas
string searchPathSchema: O esquema do banco de dados (usado em alguns bancos como PostgreSQL).

Exemplo:
MSSQL_CLIENT.CONFIGURE("localhost", 1433, "sa", "senha123", "MinhaBaseDeDados", true, false);



2. COMEÇAR_CONECTAR
Método Sem parâmetros.



3. FIM_CONECTAR
Método utilizado para fechar a conexão ativa com o banco de dados.



Sem parâmetros.
4. INÍCIO_TRANSAÇÃO
Inicia uma transação no banco de dados.
Sem parâmetros.



5. COMMIT_TRANSAÇÃO
Confirme a transação no banco de dados.
Parâmetro opcional:
bool autoRollbackIfFails: Se for verdade, a operação será revertida automaticamente em caso de falha no commit.



6. TRANSAÇÃO_ROLLBACK
Reverter uma transação
Sem parâmetros.



7. CONJUNTO
Adicionado ou configurado um parâmetro para uso em uma consulta SQL.

Parâmetros:
string parameter: O nome do parâmetro que será utilizado na consulta SQL.
object value: O valor correspondente ao parâmetro.

Exemplo:
MSSQL_CLIENT.SET("@idPedido", 1000);



8. SQL_EXEC
Executa uma instrução SQL (como INSERT, UPDATE ou DELETE) que não retorna dados.

Parâmetros:
string sql: O comando SQL que será executado.

Exemplo:
MSSQL_CLIENT.SQL_EXEC("INSERT INTO Pedidos (IdCliente, DataPedido) VALUES (@idCliente, GETDATE())");



9. CONSULTA_SQL
Executa uma consulta SQL que retorna resultados, como uma consulta SELECT.

Parâmetros:
string sql: O comando SQL que será executado.

Exemplo:
MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Pedidos WHERE IdPedido = @idPedido");



10. OBTER
Método utilizado no REDIS_CLIENT para recuperar o valor de uma chave no Redis.

Parâmetro:
string key:A chave será recuperada.

Exemplo:
string valor = REDIS_CLIENT.GET("chave");



11. DEFINIDO_TEMPORIZADO
Método para definir uma chave no Redis com expiração.

Parâmetros:
string key:
string value:O va
int days: Dias até a expiração da chave.
int hours: Horas até a expiração da chave.
int minutes: Minutos até a expiração da chave.
int seconds: Segundos até a expiração da chave.

Exemplo:
REDIS_CLIENT.SET_TIMED("chave_tempo", "valor_tempo", 0, 1, 30, 0); // expira em 1h30m



12. ANEXAR
Adicionado um anexo ao e-mail que será enviado.

Parâmetro:
string pathArquivo: O caminho completo

Exemplo:
EMAIL_CLIENT.ANEXAR("C:\\Documentos\\relatorio.pdf");



13. TEXTO_EMAIL
Envie um e-mail em formato de texto simples.

Parâmetros:
string emailDestinatario: O endereço de e-mail do destinatário.
string assunto: O assunto do e-mail.
string conteudo: O corpo do e-mail (deve ser texto simples).

Exemplo:
EMAIL_CLIENT.TEXT_EMAIL("cliente@empresa.com", "Assunto", "Este é o conteúdo do e-mail.");



14. EMAIL_HTML
Envie um e-mail em formato HTML.

Parâmetros:
string emailDestinatario: O endereço de e-mail do destinatário.
string assunto: O assunto do e-mail.
string conteudoHtml: O corpo do email

Exemplo:
EMAIL_CLIENT.HTML_EMAIL("cliente@empresa.com", "Assunto", "<html><body><p>Conteúdo HTML</p></body></html>");



15. CHAMADA_IO
Método para executar um comando externo ou arquivo correspondente.

Parâmetros:
string args: Argumentos que serão passados ​​para o comando externo.

Exemplo:
TOPSPEED_READER.CALL_IO("processar_arquivo_tps.exe");


16. LEIA
Método para ler um arquivo .tps(TopSpeed).

Parâmetros:
string tps_file: O caminho para o arquivo .tpsque será lido.
string file_password: (Opcional) A senha do arquivo, se aplicável.

Exemplo:
string conteudo = TOPSPEED_READER.READ("C:\\Dados\\arquivo.tps", "senha123");



17. LINHA_ATUAL_CSV
Retorna a linha atual da consulta SQL formatada como CSV.
Sem parâmetros.



18. LINHA_ATUAL_XML
Retorna a linha atual da consulta SQL formatada como XML.



19. SEQ_DE_CONSULTA_SQL
Parâmetros:
string sql: O comando SQL que será executado.
Exemplo:
if (SYBASE_CLIENT.SQL_QUERY_SEQ("SELECT * FROM Clientes WHERE Ativo = 1"))
{
while (SYBASE_CLIENT.TEM_LINHAS())
{
string nomeCliente = SYBASE_CLIENT.VAL_COLUNA(1).ToString();
Console.WriteLine(nomeCliente);
}
}



20. TEM_LINHAS
Método que verifica se há linhas disponíveis no resultado da consulta anterior.
Retorno:
bool: Retorno verdadeiro se houver linhas, falso caso contrário.



21. VAL_COLUNA
Método que recupera o valor de uma coluna específica na linha atual do cursor.
Parâmetros:
int coluna: O índice da coluna a ser lida (baseado em zero).
Exemplo:
var valor = SYBASE_CLIENT.VAL_COLUNA(2); // Pega o valor da segunda coluna



22. SET_TIMED (para Redis)
Método utilizado para definir uma chave no Redis com um tempo de expiração.

Parâmetros:
string key: A chave será definida.
string value: O valor associado à chave.
int days: Dias até a expiração da chave.
int hours: Horas até a expiração da chave.
int minutes: Minutos até a expiração da chave.
int seconds: Segundos até a expiração da chave.

Exemplo:
REDIS_CLIENT.SET_TIMED("sessao_usuario", "dados_usuario", 0, 0, 30, 0); // Expira em 30 minutos



23. GET_DELETE (para Redis)
Parâmetros:
string key: A chave para ser recuperada e restauração.
Exemplo:
string valor = REDIS_CLIENT.GET_DELETE("sessao_usuario");



24. ANEXAR (para e-mails)
Adicionado um arquivo anexo ao e-mail que será enviado.
Parâmetro:
string pathArquivo: O caminho do arquivo a ser anexado.



25. TEXT_EMAIL e HTML_EMAIL
Métodos para enviar e-mails em formato texto ou HTML, respectivamente. Ambos aceitam:

Parâmetros:
string emailDestinatario: O endereço de e-mail do destinatário.
string assunto: O assunto do e-mail.
string conteudo: O corpo do e-mail (texto ou HTML).

Exemplos:
EMAIL_CLIENT.TEXT_EMAIL("destinatario@empresa.com", "Assunto", "Este é o corpo do e-mail em texto.");
EMAIL_CLIENT.HTML_EMAIL("destinatario@empresa.com", "Assunto", "<h1>Este é o corpo do e-mail em HTML</h1>");




26. SQL_EXEC e SQL_QUERY
Ambos os métodos são usados ​​para executar comandos SQL, onde:

SQL_EXEC : Para comandos que não retornam dados (INSERT, UPDATE, DELETE).
SQL_QUERY : Para comandos que retornam dados (SELECT).

27. CHAMADA_IO
Execução de um arquivo correspondentemente externo.

Parâmetros:
string args: Argumentos passados ​​ao seguintevel.

Exemplo:
TOPSPEED_READER.CALL_IO("processar_arquivo.exe");



28. LEIA (para músculos TPS)
É um arquivo de dados no formato TopSpeed.

Parâmetros:
string tps_file: O caminho para o arquivo .tps.
string file_password: (opcional) Uma senha para o arquivo, se necessário.

Exemplo:
string dados = TOPSPEED_READER.READ("caminho/para/arquivo.tps", "senha");



29. LINHA_ATUAL_CSV e LINHA_ATUAL_XML
Métodos que retornam a linha atual da consulta em formato CSV ou XML, respectivamente.

Retorno:
string: A linha formatada.

Exemplos:
string linhaCSV = SYBASE_CLIENT.LINHA_ATUAL_CSV();
string linhaXML = SYBASE_CLIENT.LINHA_ATUAL_XML();


Conclusão
Esses métodos e configurações do MultiLink buscam uma maneira eficiente e integrada para acessar e manipular dados em várias bases de dados, bem como enviar notificações por e-mail.

Aqui está mais alguns detalhes dos comandos e parâmetros principais do MultiLink com base nos códigos fornecidos e exemplos

1. CONFIGURE - Configuração da Conexão
Cada classe de cliente de banco de dados possui um método CONFIGURE que define as parâmetros para estabelecer a conexão com o banco de dados.

Parâmetros comuns para todos os bancos de dados:

servidor : O endereço do servidor do banco
port (em alguns casos): Porta utilizada para conexão.
user : Nome do usuário para acessar
senha : Senha do usuário.
banco de dados : Nome do banco de dados.

Exemplo:
// Configura a conexão com um banco de dados SQL Server
MSSQL_CLIENT.CONFIGURE("servidor", "usuario", "senha", "banco", true, false);



2. Conexão ini e fim
BEGIN_CONNECT(): Inicia a conexão
END_CONNECT(): Finalize a conexão ativa.

Exemplo:
MSSQL_CLIENT.BEGIN_CONNECT(); // Inicia a conexão
MSSQL_CLIENT.END_CONNECT();
MSSQL_CLIENT.END_CONNECT();
// Encerra a conexão



3. Transações
BEGIN_TRANSACTION(): Inicia uma transação.
COMMIT_TRANSACTION(bool autoRollbackIfFails = false): Finaliza a transação e confirma as mudanças.
ROLLBACK_TRANSACTION(): Desfaz as mudanças caso algo dê errado.

Exemplo:
MSSQL_CLIENT.BEGIN_TRANSACTION(); // Inicia uma transação
MSSQL_CLIENT.COMMIT_TRANSACTION();
MSSQL_CLIENT.COMMIT_TRANSACTION();

// Comita a transação
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
MSSQL_CLIENT.ROLLBACK_TRANS
// Rola para trás em caso de falha



4. Execução de Comandos SQL
SQL_EXEC(string sql): Executa um comando SQL, como INSERT, UPDATEou DELETE.
SQL_QUERY(string sql): Executa um comando SQL que retorna dados (por exemplo, SELECT).

Exemplo:
MSSQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome) VALUES ('João')");
MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Clientes");



5. Parâmetros SQL
SET(string parameter, object value): Defina parâmetros para o comando SQL antes da execução.

Exemplo:
MSSQL_CLIENT.SET("id", 1001);
MSSQL_CLIENT.SQL_EXEC("DELETE FROM Pedidos WHERE id = @id");



6. Recuperação de Dados
DATA:Varão
MSG: Variável que armazena a mensagem de status da operação (conexão, erro, sucesso, etc.).

Exemplo:
MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Produtos");
var produtos = MSSQL_CLIENT.DATA; // JSON com os resultados

Aqui está uma seção sobre o envio de e-mails e notificações usando o MultiLink , com base nos métodos e parâmetros apresentados anteriormente:



Envio de E-mails com MultiLink

O MultiLink fornece uma funcionalidade para o envio de e-mails com suporte para anexos, tanto em formato de te

1. Configuração do Servidor de E-mail
Antes de enviar um e-mail,

Método:
public static void CONFIGURE(string servidorSmtp, int portaSmtp, bool ssl, string usuarioEmail, string senhaConta)

Parâmetros:
servidorSmtp : Endereço do servidor SMTP, como smtp.gmail.com.
portaSmtp : Número
ssl : Define se a conexão dev
usuarioEmail : O endereço de e-mail do r
senhaConta : A senha da conta do e-mail para autenticação.

Exemplo:
EMAIL_CLIENT.CONFIGURE("smtp.gmail.com", 587, true, "seuemail@gmail.com", "suasenha");



2. Envio de E-mail em Texto
Esse método permite enviar um e-mail simples em formato de texto.

Método:
public static bool TEXT_EMAIL(string emailDestinatario, string assunto, string conteudo)

Parâmetros:
emailDestinatário : Endereço de e-mail do destinatário.
assunto : Assunto do e-mail.
conteudo : O corpo do e-mail (deve ser apenas texto).

Exemplo:
EMAIL_CLIENT.TEXT_EMAIL("cliente@empresa.com", "Assunto Importante", "Esse é um e-mail de notificação.");



3. Envio de e-mail em HTML
Esse método permite enviar um e-mail no formato HTML, ideal para e-mails formatados com estilos e imagens.

Método:
public static bool HTML_EMAIL(string emailDestinatario, string assunto, string conteudoHtml)

Parâmetros
emailDestinatário : Endereço de e-mail do destinatário.
assunto : Assunto do e-mail.
conteudoHtml : O corpo do e-mail em formato HTML.

Exemplo:
EMAIL_CLIENT.HTML_EMAIL("cliente@empresa.com", "Promoção", "<html><body><h1>Desconto Especial!</h1><p>Confira nossa promoção</p></body></html>");


4. Anexar Arquivos ao E-mail
Caso seja necessário enviar um arquivo

Método:
public static void ANEXAR(string caminhoArquivo)

Parâmetro:
caminhoArquivo : O caminho completo do arquivo que será anexado ao e-mail.

Exemplo:
EMAIL_CLIENT.ANEXAR("C:\\Relatorios\\relatorio.pdf");



5. Envio de E-mail com Anexo
Depois de configurar e anexar os arquivos, o e-mail pode ser

Exemplo de Envio de E-mail com Anexo:
EMAIL_CLIENT.CONFIGURE("smtp.seuservidor.com", 587, true, "conta@seuservidor.com", "senha");
EMAIL_CLIENT.ANEXAR("C:\\Documentos\\fatura.pdf");
EMAIL_CLIENT.HTML_EMAIL("cliente@empresa.com", "Fatura Mensal", "<html><body><p>Segue a sua fatura em anexo.</p></body></html>");



6. Mensagens de Status
A variável MSGarmazena a mensagem de status da operação de envio de e-mail. Essa variável pode ser consultada após o envio para verificar se ocorreu algum erro.

Exemplo:
if (!EMAIL_CLIENT.HTML_EMAIL("cliente@empresa.com", "Promoção", "<html><body><h1>Desconto!</h1></body></html>"))
{
Console.WriteLine(EMAIL_CLIENT.MSG); // Exibe a mensagem de erro
}


Resumo de Comandos Relacionados a Envio de E-mails

Método Descrição
CONFIGURE Configure as informações do servidor SMTP, porta, SSL, e autenticação de e-mail.
TEXT_EMAIL Envie um e-mail sem formato de texto simples.
HTML_EMAIL Envie um e-mail em formato HTML.
ANEXAR Anexa um ou mais arquivos ao e-mail antes de enviar.
MSG Armazena uma mensagem de status da operação (sucesso ou erro).


Vantagens do Uso do MultiLink para Envio de E-mails

Simples de usar : A configuração é rápida e intuitiva com apenas alguns métodos.
Suporte a anexos : Fácil de enviar relatórios, faturas ou outros documentos por e-mail.
Suporte a SSL : Garante que a comunicação seja feita de forma segura através do protocolo SMTP com SSL.
Flexível : Suporta tanto formato de texto quanto HTML, permitindo uma personalização completa dos e-mails.

ESSE É O NOVO MULTILINK

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:21
Resumo dos Comandos do MultiLink
Conexão com Banco de Dados
CONFIGURAR

Configura como infor
INÍCIO_CONECTAR

Estabelece a conexão com o banco de dados.
FIM_CONECTAR

Finalize a conexão com o banco de dados.
INÍCIO_TRANSAÇÃO

Inicia uma transação no banco de dados.
COMMIT_TRANSACTION

Confirme as alterações feitas na transação.
TRANSAÇÃO_ROLLBACK

Reverter as alterações feitas na transação.
Execução de Comandos SQL
SQL_EXEC

Executar comandos
CONSULTA_SQL

Executar comandos SQL
SEQ_DE_CONSULTA_SQL

Executa uma consulta SQL e permite iterar os resultados com um cursor.
Manipulação de Resultados
TEM_LINHAS

Verifique se há linhas disponíveis no resultado da consulta.
VAL_COLUNA

Recuperar o valor de uma coluna específica na linha atual.
LINHA_ATUAL_CSV

Retorna a linha atual em formato CSV.
LINHA_ATUAL_XML

Retorna a linha at
Manipulação de Parâmetros
DEFINIR
Adicionadas configurações para comandos SQL.
Redis (Banco
DEFINIDO_TEMPORIZADO

Defina uma chave no Redis com tempo de expiração.
PEGAR

Recupera o valor associado a uma chave no Redis.
OBTER_EXCLUIR

Recuperar e remover o valor associado a uma chave no Redis.
Envio de E-mails
ANEXAR

Adicionado um arquivo anexo ao e-mail.
TEXTO_EMAIL

Envia um e-mail em formato texto.
HTML_EMAIL

Envie um e-mail em formato HTML.
Processamento de Arquivos
CHAMADA_IO
CALL_IO : Permite a execução de itens externos, facilitando integrações com sistemas externos ou processos que não estão diretamente relacionados ao banco de dados. Executa um arquivo correspondentemente externo.


LEIA
É um arquivo de dados no formato TopSpeed.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:22
Vamos criar um exemplo para conectar em uma base MS SQL Server usando o Multilink em C# e WLanguage.

Exemplo em C#:
c sustenido

Copiar código
using MultiLink;
using System;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", true, true);

if (MSSQL_CLIENT.BEGIN_CONNECT())
{
Console.WriteLine("Conectado ao banco de dados!");

// Executar uma consulta
MSSQL_CLIENT.SQL_QUERY("SELECT * FROM table_name");
Console.WriteLine(MSSQL_CLIENT.DATA);

MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine("Erro: " + MSSQL_CLIENT.MSG);
}
}
}
Exemplo em WLanguage (Windev):
widioma

Copiar código
// Configurando a conexão
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", True, True)

// Iniciando a conexão
IF MSSQL_CLIENT.BEGIN_CONNECT() THEN
Info("Conectado ao banco de dados!")

// Executando uma consulta
MSSQL_CLIENT.SQL_QUERY("SELECT * FROM table_name")
Info(MSSQL_CLIENT.DATA)

// Fechando a conexão
MSSQL_CLIENT.END_CONNECT()
ELSE
Info("Erro: " + MSSQL_CLIENT.MSG)
END


Esses exemplos demonstram como usar o Multilink para conectar a um banco MS SQL Server e realizar consultas em ambas as linguagens. Uma classe MSSQL_CLIENTdo Multilink gerencia a conexão, transações e execução de comandos SQL.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:23
Vamos criar um exemplo para obter a lista de produtos de um pedido número 1000, considerando duas tabelas relacionadas no MS SQL Server: Orders(Pedidos) e OrderDetails(Detalhes do Pedido).

Estrutura das Tabelas:
Pedidos (Pedidos):

OrderID(Chave Primária)
CustomerID
OrderDate
OrderDetails (Detalhes do Pedido):

OrderDetailID(Chave Primária)
OrderID(Chave Estrangeira para Orders)
ProductID
Quantity
Exemplo em C#:
c sustenido

Copiar código
using MultiLink;
using System;

class Program
{
static void Main()
{
// Configura a conexão
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", true, true);

if (MSSQL_CLIENT.BEGIN_CONNECT())
{
Console.WriteLine("Conectado ao banco de dados!");

// Consulta para obter os detalhes do pedido número 1000
string sqlQuery = @"
SELECT od.ProductID, od.Quantity
FROM OrderDetails od
INNER JOIN Orders o ON od.OrderID = o.OrderID
WHERE o.OrderID = 1000";

MSSQL_CLIENT.SQL_QUERY(sqlQuery);
Console.WriteLine(MSSQL_CLIENT.DATA); // Exibe os resultados em formato JSON

MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine("Erro: " + MSSQL_CLIENT.MSG);
}
}
}
Exemplo em WLanguage (Windev):
widioma

Copiar código
// Configurando a conexão
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", True, True)

// Iniciando a conexão
IF MSSQL_CLIENT.BEGIN_CONNECT() THEN
Info("Conectado ao banco de dados!")

// Consulta para obter os detalhes do pedido número 1000
sQuery is string = "
SELECT od.ProductID, od.Quantity
FROM OrderDetails od
INNER JOIN Orders o ON od.OrderID = o.OrderID
WHERE o.OrderID = 1000"

MSSQL_CLIENT.SQL_QUERY(sQuery)
Info(MSSQL_CLIENT.DATA) // Exibe os resultados em formato JSON

// Fechando a conexão
MSSQL_CLIENT.END_CONNECT()
ELSE
Info("Erro: " + MSSQL_CLIENT.MSG)
END


Explicação:
Em ambas as linguagens, utilizamos uma consulta SQL com um INNER JOINentre as tabelas OrderDetailse Orderspara obter os produtos do pedido número 1000. O resultado é exibido no formato JSON.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:23
Vamos criar um exemplo para consultar dados usando as tabelas: Clientes, Pedidos, Pedidos_Itens, Impostos, e Transportadora, utilizando o MultiLink em C# e WLanguage.

Estrutura das Tabelas:
Clientes :

ClienteID(PK)
NomeCliente
Endereco
Pedidos :

PedidoID(PK)
ClienteID(FK)
DataPedido
Pedidos_Itens :

PedidoItemID(PK)
PedidoID(FK)
ProdutoID
Quantidade
Impostos :

ImpostoID(PK)
PedidoItemID(FK)
ValorImposto
Transportadora :

TransportadoraID(PK)
NomeTransportadora
ValorFrete
Exemplo em C#:
c sustenido

Copiar código
using MultiLink;
using System;

class Program
{
static void Main()
{
// Configurando a conexão
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", true, true);

if (MSSQL_CLIENT.BEGIN_CONNECT())
{
Console.WriteLine("Conectado ao banco de dados!");

// Consulta para obter os detalhes dos pedidos e impostos de um cliente específico
string sqlQuery = @"
SELECT c.NomeCliente, p.DataPedido, pi.ProdutoID, pi.Quantidade, imp.ValorImposto, t.NomeTransportadora
FROM Pedidos p
INNER JOIN Clientes c ON p.ClienteID = c.ClienteID
INNER JOIN Pedidos_Itens pi ON p.PedidoID = pi.PedidoID
INNER JOIN Impostos imp ON pi.PedidoItemID = imp.PedidoItemID
LEFT JOIN Transportadora t ON p.TransportadoraID = t.TransportadoraID
WHERE c.ClienteID = 1001";

MSSQL_CLIENT.SQL_QUERY(sqlQuery);
Console.WriteLine(MSSQL_CLIENT.DATA); // Exibe os resultados em formato JSON

MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine("Erro: " + MSSQL_CLIENT.MSG);
}
}
}
Exemplo em WLanguage (Windev):
widioma

Copiar código
// Configurando a conexão
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", True, True)

// Iniciando a conexão
IF MSSQL_CLIENT.BEGIN_CONNECT() THEN
Info("Conectado ao banco de dados!")

// Consulta para obter os detalhes dos pedidos e impostos de um cliente específico
sQuery is string = "
SELECT c.NomeCliente, p.DataPedido, pi.ProdutoID, pi.Quantidade, imp.ValorImposto, t.NomeTransportadora
FROM Pedidos p
INNER JOIN Clientes c ON p.ClienteID = c.ClienteID
INNER JOIN Pedidos_Itens pi ON p.PedidoID = pi.PedidoID
INNER JOIN Impostos imp ON pi.PedidoItemID = imp.PedidoItemID
LEFT JOIN Transportadora t ON p.TransportadoraID = t.TransportadoraID
WHERE c.ClienteID = 1001"

MSSQL_CLIENT.SQL_QUERY(sQuery)
Info(MSSQL_CLIENT.DATA) // Exibe os resultados em formato JSON

// Fechando a conexão
MSSQL_CLIENT.END_CONNECT()
ELSE
Info("Erro: " + MSSQL_CLIENT.MSG)
END


Explicação:
O exemplo utiliza várias tabelas relacionadas para obter detalhes de pedidos, produtos, impostos, e transportadoras.
A consulta SQL inclui INNER JOINtabelas relacionais e um LEFT JOINpara trazer os dados de Transportadoraque existem.
O código exibe o resultado em formato JSON tanto no C# quanto no WLanguage.
Esses exemplos permitem a interação completa com o banco de dados MS SQL Server, usando o MultiLink para abstrair as chamadas da DLL e gerenciar a conexão.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:24
Visão geral
O Multilink, desenvolvido pela WX Soluções, fornece acesso nativo a bancos de dados em vários sistemas. Esta DLL suporta múltiplos mecanismos de banco de dados como o MS SQL Server, e é totalmente integrado com C# e WLanguage. Abaixo, discutiremos os principais métodos disponíveis e seu uso.

Métodos Multilink C# (MS SQL Server)
CONFIGURE(servidor, usuário, senha, banco de dados, trustCert, criptografar)
Configura a string de conexão com o servidor, credenciais do usuário e parâmetros de segurança.

BEGIN_CONNECT()
Inicia a conexão com o SQL Server. Garanta que as credenciais e a configuração estejam definidas de antemão.

END_CONNECT()
Fecha a conexão SQL atual e descarta o objeto de conexão.

BEGIN_TRANSACTION()
Inicia uma transação SQL para operações atômicas.

COMMIT_TRANSACTION(rollbackOnFail)
Confirma a transação atual. Opcionalmente, reverte em caso de falha.

ROLLBACK_TRANSACTION()
Reverte a transação ativa.

SQL_EXEC(sql)
Executa comandos SQL que não são de consulta, como INSERT, UPDATE ou DELETE, com parâmetros opcionais.

SQL_QUERY(sql)
Executa uma consulta SELECT e retorna os resultados como JSON. Permite buscar registros de tabelas.

SET(param, value)
Adiciona um parâmetro SQL para a próxima consulta ou comando SQL.

Métodos multilink WLanguage (MS SQL Server)
MultilinkConfigure(server, user, password, database, trustCert, encrypt)
Configura a conexão com o servidor MS SQL, incluindo credenciais e parâmetros de segurança.

MultilinkBeginConnect()
Inicia a conexão com o servidor SQL. Deve ser chamada após configurar a conexão.

MultilinkEndConnect()
Finaliza e desconecta a sessão SQL atual.

MultilinkBeginTransaction()
Inicia uma transação SQL, ideal para transações que precisam ser atômicas.

MultilinkCommitTransaction(rollbackOnFail)
Confirma a transação SQL, com a opção de rollback caso falhe.

MultilinkRollbackTransaction()
Realiza o rollback da transação ativa, desconsiderando alterações não confirmadas.

MultilinkSQLExec(sql)
Executa comandos SQL (como INSERT, UPDATE, DELETE) e retorna o número de registros abordados.

MultilinkSQLQuery(sql)
Realiza uma consulta SELECT e retorna os dados no formato JSON.

MultilinkSet(param, value)
Define parâmetros de SQL para serem usados ​​nas consultas ou execuções subsequentes.

Benefícios do uso do Multilink
Compatibilidade entre plataformas : funciona perfeitamente com C# e WLanguage para conexão com o MS SQL Server.
Segurança : Certificados de confiança e opções de criptografia garantem uma conexão segura.
Gerenciamento de transações : oferece suporte a transações SQL, permitindo consistência confiável de dados.
Manipulação eficiente de dados : a serialização JSON dos resultados da consulta simplifica a manipulação de dados.
Consultas parametrizadas : fornece suporte para instruções preparadas por meio SETde métodos, reduzindo o risco de injeção de SQL.
Ao usar o Multilink, você pode otimizar tarefas de gerenciamento de banco de dados em C# e WLanguage com uma interface unificada, melhorando a eficiência em ambientes com vários bancos de dados.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:24
Visão Geral
O Multilink, desenvolvido pela WX Soluções, oferece acesso nativo a diversos sistemas de banco de dados, incluindo o MS SQL Server. Ele é totalmente integrado ao C# e WLanguage, fornecendo métodos robustos para lidar com consultas e transações.

Métodos C# Multilink (MS SQL Server)
CONFIGURE(server, user, password, database, trustCert, encrypt)
Configura a conexão com o servidor SQL, fornecendo credenciais e parâmetros de segurança.

BEGIN_CONNECT()
Inicia a conexão com o servidor SQL após a configuração adequada.

END_CONNECT()
Encerra a conexão SQL aberta, garantindo a liberação de recursos.

BEGIN_TRANSACTION()
Inicia uma transação SQL para garantir transações atômicas.

COMMIT_TRANSACTION(rollbackOnFail)
Confirma a transação SQL. Caso a execução falhe, você pode fazer o rollback automaticamente.

ROLLBACK_TRANSACTION()
Desfaz as operações dentro de uma transação ativa.

SQL_EXEC(sql)
Executa comandos SQL como INSERT, UPDATE e DELETE, retornando o número de consultas afetadas.

SQL_QUERY(sql)
Executa uma consulta SELECT e retorna os dados como JSON.

SET(param, value)
Define parâmetros para serem usados ​​nas próximas consultas SQL, permitindo consultas parametrizadas.

Métodos WLanguage Multilink (MS SQL Server)
MultilinkConfigure(server, user, password, database, trustCert, encrypt)
Configura a conexão com o servidor MS SQL, permitindo a inserção de credenciais e configurações de segurança.

MultilinkBeginConnect()
Inicia a conexão com o banco de dados após a configuração inicial.

MultilinkEndConnect()
Desconecta uma sessão SQL ativa.

MultilinkBeginTransaction()
Inicia uma transação SQL para garantir a consistência das operações.

MultilinkCommitTransaction(rollbackOnFail)
Confirma a transação SQL, com a possibilidade de rollback em caso de falha.

MultilinkRollbackTransaction()
Desfaz as operações dentro da transação ativa.

MultilinkSQLExec(sql)
Executa comandos SQL e retorna a quantidade de registros afetados.

MultilinkSQLQuery(sql)
Executa uma consulta SELECT e retorna os dados no formato JSON.

MultilinkSet(param, value)
Define parâmetros SQL para consultas ou comandos subsequentes.

Benefícios do Multilink
Compatibilidade Multiplataforma : Funciona perfeitamente com C# e WLanguage, permitindo o acesso ao MS SQL Server de forma unificada.
Segurança : Suporte a certificados e criptografia para conexões seguras.
Gerenciamento de Transações : Oferece suporte a transações SQL para garantir a consistência dos dados.
Manipulação Eficiente de Dados : Retorna os dados das consultas em formato JSON, facilitando o processamento.
Consultas Parametrizadas : Suporte a consultas preparadas através dos métodos SET, reduzindo riscos de injeção SQL.
Ao utilizar o Multilink, você simplifica o gerenciamento de bancos de dados, melhorando a eficiência de suas operações em ambientes com múltiplos sistemas de banco de dados.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:25
Exemplos de Uso do Multilink para MS SQL Server

Exemplo 1: Conexão e Execução de Comandos em C#
using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
MSSQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Email) VALUES ('Adriano', 'adriano@example.com')");
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}


Exemplo 2: Conexão e Consulta com Transação em C#
using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
MSSQL_CLIENT.BEGIN_TRANSACTION();
MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Pedidos WHERE ClienteID = 1");
MSSQL_CLIENT.COMMIT_TRANSACTION();
MSSQL_CLIENT.END_CONNECT();

Console.WriteLine(MSSQL_CLIENT.DATA);
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}


Exemplo 3: Conexão e Execução de Comandos no WLanguage
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
MultilinkSQLExec("INSERT INTO Clientes (Nome, Email) VALUES ('Adriano', 'adriano@example.com')")
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END


Exemplo 4: Consulta com Transação no WLanguage
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
MultilinkBeginTransaction()
MultilinkSQLQuery("SELECT * FROM Pedidos WHERE ClienteID = 1")
MultilinkCommitTransaction(True)
Info(MultilinkDATA())
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END

Esses exemplos demonstram como utilizar o Multilink para gerenciar conexões, transações e executar comandos SQL no C# e WLanguage, simplificando o acesso ao MS SQL Server.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:26
Vamos avançar com mais um exemplo relacionado ao Multilink , utilizando várias tabelas para consultas relacionadas no MS SQL Server .

Exemplo 5: Consulta Relacionada de Pedidos e Produtos no C#
using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
MSSQL_CLIENT.SQL_QUERY(@"
SELECT p.PedidoID, c.Nome AS Cliente, pi.ProdutoID, pr.Nome AS Produto, pi.Quantidade
FROM Pedidos p
INNER JOIN Clientes c ON p.ClienteID = c.ClienteID
INNER JOIN Pedidos_Itens pi ON p.PedidoID = pi.PedidoID
INNER JOIN Produtos pr ON pi.ProdutoID = pr.ProdutoID
WHERE p.PedidoID = 1000");

Console.WriteLine(MSSQL_CLIENT.DATA);
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 6: Consulta Relacionada de Pedidos e Produtos no WLanguage
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
MultilinkSQLQuery("
SELECT p.PedidoID, c.Nome AS Cliente, pi.ProdutoID, pr.Nome AS Produto, pi.Quantidade
FROM Pedidos p
INNER JOIN Clientes c ON p.ClienteID = c.ClienteID
INNER JOIN Pedidos_Itens pi ON p.PedidoID = pi.PedidoID
INNER JOIN Produtos pr ON pi.ProdutoID = pr.ProdutoID
WHERE p.PedidoID = 1000")

Info(MultilinkDATA())
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END


Explicação
Esses exemplos fazem a consulta dos dados relacionados de Clientes , Pedidos , Itens do Pedido e Produtos , retornando os produtos e suas respectivas quantidades de um pedido específico (neste caso, o pedido número 1000). Os códigos exemplificam como utilizar o Multilink tanto em C# quanto em WLanguage , aproveitando a flexibilidade do framework para acessar o MS SQL Server de forma eficiente e estruturada.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:27
Exemplo 7: Inserção de Novo Pedido e Itens no C#

Neste exemplo, você verá como usar o Multilink para realizar a inserção de dados nas tabelas Pedidos e Pedidos_Itens utilizando transações.

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
if (MSSQL_CLIENT.BEGIN_TRANSACTION())
{
// Inserção no pedido
MSSQL_CLIENT.SET("ClienteID", 123);
MSSQL_CLIENT.SET("DataPedido", "2024-10-24");
MSSQL_CLIENT.SQL_EXEC("INSERT INTO Pedidos (ClienteID, DataPedido) VALUES (@ClienteID, @DataPedido)");

// Obtendo o ID do novo pedido
MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS PedidoID");
string pedidoID = MSSQL_CLIENT.DATA;

// Inserindo itens no pedido
MSSQL_CLIENT.SET("PedidoID", pedidoID);
MSSQL_CLIENT.SET("ProdutoID", 101);
MSSQL_CLIENT.SET("Quantidade", 5);
MSSQL_CLIENT.SQL_EXEC("INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade) VALUES (@PedidoID, @ProdutoID, @Quantidade)");

// Commit da transação
MSSQL_CLIENT.COMMIT_TRANSACTION();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 8: Inserção de Novo Pedido e Itens no WLanguage
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
IF MultilinkBeginTransaction() THEN
// Inserindo novo pedido
MultilinkSet("ClienteID", 123)
MultilinkSet("DataPedido", "2024-10-24")
MultilinkSQLExec("INSERT INTO Pedidos (ClienteID, DataPedido) VALUES (@ClienteID, @DataPedido)")

// Obtendo ID do pedido
MultilinkSQLQuery("SELECT SCOPE_IDENTITY() AS PedidoID")
PedidoID is string = MultilinkDATA()

// Inserindo itens do pedido
MultilinkSet("PedidoID", PedidoID)
MultilinkSet("ProdutoID", 101)
MultilinkSet("Quantidade", 5)
MultilinkSQLExec("INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade) VALUES (@PedidoID, @ProdutoID, @Quantidade)")

// Commit da transação
MultilinkCommitTransaction()
ELSE
Info(MultilinkMSG())
END
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END


Explicação:
Esses exemplos mostram como inserir um novo pedido e seus itens relacionados em ambas as linguagens, aproveitando o suporte a transações do Multilink para garantir a consistência dos dados.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:28
Exemplo 9: Consulta Relacionada com Impostos e Transportadora (C#)

Neste exemplo, você verá como usar o Multilink para realizar uma consulta que envolve as tabelas Pedidos , Pedidos_Itens , Impostos e Transportadora .

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
string sqlQuery = @"
SELECT P.PedidoID, P.DataPedido, T.NomeTransportadora, I.TaxaImposto
FROM Pedidos P
JOIN Transportadora T ON P.TransportadoraID = T.TransportadoraID
JOIN Impostos I ON P.ImpostoID = I.ImpostoID
WHERE P.PedidoID = @PedidoID";

MSSQL_CLIENT.SET("PedidoID", 1000);
MSSQL_CLIENT.SQL_QUERY(sqlQuery);

Console.WriteLine(MSSQL_CLIENT.DATA);
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 10: Consulta Relacionada com Impostos e Transportadora (WLanguage)
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
PedidoID is int = 1000
sqlQuery is string = "
SELECT P.PedidoID, P.DataPedido, T.NomeTransportadora, I.TaxaImposto
FROM Pedidos P
JOIN Transportadora T ON P.TransportadoraID = T.TransportadoraID
JOIN Impostos I ON P.ImpostoID = I.ImpostoID
WHERE P.PedidoID = @PedidoID"

MultilinkSet("PedidoID", PedidoID)
MultilinkSQLQuery(sqlQuery)

Info(MultilinkDATA())
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END


Explicação:
Esses exemplos demonstram uma consulta entre várias tabelas relacionadas para exibir detalhes do pedido, como o nome da transportadora e a taxa de imposto. O Multilink permite combinar diferentes tabelas em consultas SQL complexas para buscar informações.


Exemplo 11: Exibindo Detalhes de Cliente e Itens do Pedido com Impostos e Transportadora (C#)
using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
string sqlQuery = @"
SELECT C.NomeCliente, P.PedidoID, PI.NomeProduto, PI.Quantidade, I.TaxaImposto, T.NomeTransportadora
FROM Clientes C
JOIN Pedidos P ON C.ClienteID = P.ClienteID
JOIN Pedidos_Itens PI ON P.PedidoID = PI.PedidoID
JOIN Impostos I ON PI.ImpostoID = I.ImpostoID
JOIN Transportadora T ON P.TransportadoraID = T.TransportadoraID
WHERE P.PedidoID = @PedidoID";

MSSQL_CLIENT.SET("PedidoID", 1000);
MSSQL_CLIENT.SQL_QUERY(sqlQuery);

Console.WriteLine(MSSQL_CLIENT.DATA);
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 12: Exibindo Detalhes de Cliente e Itens do Pedido com Impostos e Transportadora (WLanguage)
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
PedidoID is int = 1000
sqlQuery is string = "
SELECT C.NomeCliente, P.PedidoID, PI.NomeProduto, PI.Quantidade, I.TaxaImposto, T.NomeTransportadora
FROM Clientes C
JOIN Pedidos P ON C.ClienteID = P.ClienteID
JOIN Pedidos_Itens PI ON P.PedidoID = PI.PedidoID
JOIN Impostos I ON PI.ImpostoID = I.ImpostoID
JOIN Transportadora T ON P.TransportadoraID = T.TransportadoraID
WHERE P.PedidoID = @PedidoID"

MultilinkSet("PedidoID", PedidoID)
MultilinkSQLQuery(sqlQuery)

Info(MultilinkDATA())
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END


Explicação:
Esse exemplo demonstra como exibir os detalhes de um cliente e os itens de um pedido específico, incluindo as informações de impostos e transportadora, utilizando o Multilink tanto em C# quanto em WLanguage.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:29
Exemplo 13: Atualizando o Status de Pedidos e Enviando Notificações (C#)
using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
// Atualizar status do pedido
string updateStatusSql = "UPDATE Pedidos SET Status = @Status WHERE PedidoID = @PedidoID";
MSSQL_CLIENT.SET("Status", "Enviado");
MSSQL_CLIENT.SET("PedidoID", 1000);
MSSQL_CLIENT.SQL_EXEC(updateStatusSql);

// Enviar notificação para o cliente
EMAIL_CLIENT.CONFIGURE("smtp.server.com", 587, true, "user@server.com", "password");
string emailCliente = "cliente@exemplo.com";
EMAIL_CLIENT.TEXT_EMAIL(emailCliente, "Pedido Enviado", "Seu pedido foi atualizado para o status 'Enviado'.");

Console.WriteLine(MSSQL_CLIENT.MSG);
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 14: Atualizando o Status de Pedidos e Enviando Notificações (WLanguage)
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
// Atualizar status do pedido
sqlUpdateStatus is string = "UPDATE Pedidos SET Status = @Status WHERE PedidoID = @PedidoID"
MultilinkSet("Status", "Enviado")
MultilinkSet("PedidoID", 1000)
MultilinkSQLExec(sqlUpdateStatus)

// Enviar notificação por e-mail para o cliente
MultilinkEmailConfigure("smtp.server.com", 587, True, "user@server.com", "password")
MultilinkEmailText("cliente@exemplo.com", "Pedido Enviado", "Seu pedido foi atualizado para o status 'Enviado'.")

Info(MultilinkMSG())
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END



Explicação:
Neste exemplo, atualizamos o status de um pedido no banco de dados para "Enviado" e enviamos uma notificação por e-mail ao cliente. O código mostra como executar comandos SQL e enviar e-mails usando o Multilink .

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:30
Exemplo 15: Excluindo Pedidos Antigos e Gerando um Relatório (C#)

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
// Excluir pedidos antigos
string deleteOldOrdersSql = "DELETE FROM Pedidos WHERE DataPedido < @DataLimite";
MSSQL_CLIENT.SET("DataLimite", "2023-01-01");
MSSQL_CLIENT.SQL_EXEC(deleteOldOrdersSql);

// Gerar relatório
string selectRelatorio = "SELECT * FROM Pedidos WHERE DataPedido >= @DataLimite";
MSSQL_CLIENT.SET("DataLimite", "2023-01-01");
MSSQL_CLIENT.SQL_QUERY(selectRelatorio);

// Salvar relatório como JSON
string relatorio = MSSQL_CLIENT.DATA;
System.IO.File.WriteAllText("RelatorioPedidos.json", relatorio);

Console.WriteLine("Relatório gerado com sucesso.");
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 16: Excluindo Pedidos Antigos e Gerando um Relatório (WLanguage)
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
// Excluir pedidos antigos
sqlDeleteOldOrders is string = "DELETE FROM Pedidos WHERE DataPedido < @DataLimite"
MultilinkSet("DataLimite", "2023-01-01")
MultilinkSQLExec(sqlDeleteOldOrders)

// Gerar relatório
sqlSelectRelatorio is string = "SELECT * FROM Pedidos WHERE DataPedido >= @DataLimite"
MultilinkSet("DataLimite", "2023-01-01")
MultilinkSQLQuery(sqlSelectRelatorio)

// Salvar relatório como JSON
sRelatorio is string = MultilinkDATA()
fSaveText("RelatorioPedidos.json", sRelatorio)

Info("Relatório gerado com sucesso.")
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END



Explicação:
Neste exemplo, o código exclui pedidos antigos, com dados anteriores a 2023-01-01, e gera um relatório em formato JSON dos pedidos mais recentes, salvando-o em um arquivo.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:30
Exemplo 17: Atualizando Estoques de Produtos e Emitindo Relatório (C#)

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
// Atualizar estoque de produtos
string updateStockSql = "UPDATE Produtos SET Estoque = Estoque - @QtdVendida WHERE ProdutoID = @ProdutoID";
MSSQL_CLIENT.SET("QtdVendida", 10);
MSSQL_CLIENT.SET("ProdutoID", 1001);
MSSQL_CLIENT.SQL_EXEC(updateStockSql);

// Gerar relatório de produtos atualizados
string selectRelatorio = "SELECT * FROM Produtos WHERE Estoque < 100";
MSSQL_CLIENT.SQL_QUERY(selectRelatorio);

// Salvar relatório como JSON
string relatorio = MSSQL_CLIENT.DATA;
System.IO.File.WriteAllText("RelatorioEstoque.json", relatorio);

Console.WriteLine("Relatório gerado com sucesso.");
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 18: Atualizando Estoques de Produtos e Emitindo Relatório (WLanguage)

MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
// Atualizar estoque de produtos
sqlUpdateStock is string = "UPDATE Produtos SET Estoque = Estoque - @QtdVendida WHERE ProdutoID = @ProdutoID"
MultilinkSet("QtdVendida", 10)
MultilinkSet("ProdutoID", 1001)
MultilinkSQLExec(sqlUpdateStock)

// Gerar relatório de produtos atualizados
sqlSelectRelatorio is string = "SELECT * FROM Produtos WHERE Estoque < 100"
MultilinkSQLQuery(sqlSelectRelatorio)

// Salvar relatório como JSON
sRelatorio is string = MultilinkDATA()
fSaveText("RelatorioEstoque.json", sRelatorio)

Info("Relatório gerado com sucesso.")
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END



Explicação:
O exemplo mostra como atualizar o estoque de produtos, subtraindo a quantidade vendida, e como gerar um relatório de cujo estoque está abaixo de 100 unidades, salvando-o em um arquivo JSON.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:31
Exemplo 19: Atualizando Informações de Clientes com Validação de Transações (C#)

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
if (MSSQL_CLIENT.BEGIN_TRANSACTION())
{
// Atualizar informações do cliente
string updateCliente = "UPDATE Clientes SET Email = @Email WHERE ClienteID = @ClienteID";
MSSQL_CLIENT.SET("Email", "cliente@exemplo.com");
MSSQL_CLIENT.SET("ClienteID", 1234);
if (MSSQL_CLIENT.SQL_EXEC(updateCliente))
{
// Se a atualização foi bem-sucedida, commit na transação
MSSQL_CLIENT.COMMIT_TRANSACTION();
Console.WriteLine("Informações do cliente atualizadas e transação confirmada.");
}
else
{
// Se houve erro, rollback
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao atualizar, transação revertida.");
}
MSSQL_CLIENT.END_CONNECT();
}
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 20: Atualizando Informações de Clientes com Validação de Transações (WLanguage)

MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
IF MultilinkBeginTransaction() THEN
// Atualizar informações do cliente
sqlUpdateCliente is string = "UPDATE Clientes SET Email = @Email WHERE ClienteID = @ClienteID"
MultilinkSet("Email", "cliente@exemplo.com")
MultilinkSet("ClienteID", 1234)
IF MultilinkSQLExec(sqlUpdateCliente) THEN
// Commit na transação
MultilinkCommitTransaction()
Info("Informações do cliente atualizadas e transação confirmada.")
ELSE
// Rollback na transação
MultilinkRollbackTransaction()
Info("Erro ao atualizar, transação revertida.")
END
MultilinkEndConnect()
END
ELSE
Info(MultilinkMSG())
END


Explicação:
Este exemplo mostra como usar transações para garantir que, ao atualizar dados de um cliente, a operação só será finalizada com sucesso (commit) se tudo ocorrer conforme o esperado. Em caso de erro, a transação é revertida (rollback).

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:32
Exemplo 21: Deletando Pedidos e Itens Relacionados com Transação (C#)

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
if (MSSQL_CLIENT.BEGIN_TRANSACTION())
{
// Deletar itens do pedido
string deleteItens = "DELETE FROM Pedidos_Itens WHERE PedidoID = @PedidoID";
MSSQL_CLIENT.SET("PedidoID", 1001);
if (MSSQL_CLIENT.SQL_EXEC(deleteItens))
{
// Deletar pedido após deletar os itens
string deletePedido = "DELETE FROM Pedidos WHERE PedidoID = @PedidoID";
MSSQL_CLIENT.SET("PedidoID", 1001);
if (MSSQL_CLIENT.SQL_EXEC(deletePedido))
{
MSSQL_CLIENT.COMMIT_TRANSACTION();
Console.WriteLine("Pedido e itens deletados com sucesso.");
}
else
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao deletar pedido, transação revertida.");
}
}
else
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao deletar itens, transação revertida.");
}
MSSQL_CLIENT.END_CONNECT();
}
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 22: Deletando Pedidos e Itens Relacionados com Transação (WLanguage)
MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
IF MultilinkBeginTransaction() THEN
// Deletar itens do pedido
sqlDeleteItens is string = "DELETE FROM Pedidos_Itens WHERE PedidoID = @PedidoID"
MultilinkSet("PedidoID", 1001)
IF MultilinkSQLExec(sqlDeleteItens) THEN
// Deletar pedido
sqlDeletePedido is string = "DELETE FROM Pedidos WHERE PedidoID = @PedidoID"
MultilinkSet("PedidoID", 1001)
IF MultilinkSQLExec(sqlDeletePedido) THEN
MultilinkCommitTransaction()
Info("Pedido e itens deletados com sucesso.")
ELSE
MultilinkRollbackTransaction()
Info("Erro ao deletar pedido, transação revertida.")
END
ELSE
MultilinkRollbackTransaction()
Info("Erro ao deletar itens, transação revertida.")
END
MultilinkEndConnect()
END
ELSE
Info(MultilinkMSG())
END


Explicação:
Este exemplo mostra como realizar a exclusão de um pedido e seus itens associados em duas tabelas relacionadas usando o MultiLink . A transação garante que, caso qualquer uma das exclusões falhe, nenhuma alteração seja feita no banco de dados, mantendo a consistência.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:32
Exemplo 23: Atualizando Informações de Clientes e Transportadora com Transação (C#)

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
if (MSSQL_CLIENT.BEGIN_TRANSACTION())
{
// Atualizar informações de cliente
string updateCliente = "UPDATE Clientes SET Nome = @Nome WHERE ClienteID = @ClienteID";
MSSQL_CLIENT.SET("Nome", "Novo Nome");
MSSQL_CLIENT.SET("ClienteID", 101);
if (MSSQL_CLIENT.SQL_EXEC(updateCliente))
{
// Atualizar informações de transportadora
string updateTransportadora = "UPDATE Transportadora SET Telefone = @Telefone WHERE TransportadoraID = @TransportadoraID";
MSSQL_CLIENT.SET("Telefone", "9999-8888");
MSSQL_CLIENT.SET("TransportadoraID", 201);
if (MSSQL_CLIENT.SQL_EXEC(updateTransportadora))
{
MSSQL_CLIENT.COMMIT_TRANSACTION();
Console.WriteLine("Informações de cliente e transportadora atualizadas com sucesso.");
}
else
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao atualizar transportadora, transação revertida.");
}
}
else
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao atualizar cliente, transação revertida.");
}
MSSQL_CLIENT.END_CONNECT();
}
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 24: Atualizando Informações de Clientes e Transportadora com Transação (WLanguage)

MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
IF MultilinkBeginTransaction() THEN
// Atualizar informações do cliente
sqlUpdateCliente is string = "UPDATE Clientes SET Nome = @Nome WHERE ClienteID = @ClienteID"
MultilinkSet("Nome", "Novo Nome")
MultilinkSet("ClienteID", 101)
IF MultilinkSQLExec(sqlUpdateCliente) THEN
// Atualizar informações da transportadora
sqlUpdateTransportadora is string = "UPDATE Transportadora SET Telefone = @Telefone WHERE TransportadoraID = @TransportadoraID"
MultilinkSet("Telefone", "9999-8888")
MultilinkSet("TransportadoraID", 201)
IF MultilinkSQLExec(sqlUpdateTransportadora) THEN
MultilinkCommitTransaction()
Info("Informações de cliente e transportadora atualizadas com sucesso.")
ELSE
MultilinkRollbackTransaction()
Info("Erro ao atualizar transportadora, transação revertida.")
END
ELSE
MultilinkRollbackTransaction()
Info("Erro ao atualizar cliente, transação revertida.")
END
MultilinkEndConnect()
END
ELSE
Info(MultilinkMSG())
END



Explicação:
Esses exemplos mostram como usar o MultiLink para atualizar as informações de clientes e transportar de forma transacional. Caso uma das atualizações falhe, a transação é revertida, garantindo que os dados permaneçam consistentes.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:33
Exemplo 25: Inserindo Pedido com Itens e Impostos (C#)

using MultiLink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
if (MSSQL_CLIENT.BEGIN_TRANSACTION())
{
// Inserir pedido
string insertPedido = "INSERT INTO Pedidos (ClienteID, DataPedido, TransportadoraID) VALUES (@ClienteID, @DataPedido, @TransportadoraID)";
MSSQL_CLIENT.SET("ClienteID", 123);
MSSQL_CLIENT.SET("DataPedido", DateTime.Now);
MSSQL_CLIENT.SET("TransportadoraID", 5);
if (MSSQL_CLIENT.SQL_EXEC(insertPedido))
{
// Recuperar ID do pedido recém inserido
MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS PedidoID");
int pedidoID = Convert.ToInt32(MSSQL_CLIENT.DATA);

// Inserir itens do pedido
string insertItem = "INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade) VALUES (@PedidoID, @ProdutoID, @Quantidade)";
MSSQL_CLIENT.SET("PedidoID", pedidoID);
MSSQL_CLIENT.SET("ProdutoID", 12);
MSSQL_CLIENT.SET("Quantidade", 5);
if (MSSQL_CLIENT.SQL_EXEC(insertItem))
{
// Inserir impostos
string insertImposto = "INSERT INTO Impostos (PedidoID, ImpostoID, Valor) VALUES (@PedidoID, @ImpostoID, @Valor)";
MSSQL_CLIENT.SET("PedidoID", pedidoID);
MSSQL_CLIENT.SET("ImpostoID", 3);
MSSQL_CLIENT.SET("Valor", 50);
if (MSSQL_CLIENT.SQL_EXEC(insertImposto))
{
MSSQL_CLIENT.COMMIT_TRANSACTION();
Console.WriteLine("Pedido e seus itens e impostos inseridos com sucesso.");
}
else
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao inserir impostos, transação revertida.");
}
}
else
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao inserir itens, transação revertida.");
}
}
else
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro ao inserir pedido, transação revertida.");
}
MSSQL_CLIENT.END_CONNECT();
}
}
else
{
Console.WriteLine(MSSQL_CLIENT.MSG);
}
}
}



Exemplo 26: Inserindo Pedido com Itens e Impostos (WLanguage)

MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
IF MultilinkBeginTransaction() THEN
// Inserir pedido
insertPedido is string = "INSERT INTO Pedidos (ClienteID, DataPedido, TransportadoraID) VALUES (@ClienteID, @DataPedido, @TransportadoraID)"
MultilinkSet("ClienteID", 123)
MultilinkSet("DataPedido", Today())
MultilinkSet("TransportadoraID", 5)
IF MultilinkSQLExec(insertPedido) THEN
// Recuperar ID do pedido recém inserido
MultilinkSQLQuery("SELECT SCOPE_IDENTITY() AS PedidoID")
pedidoID is int = MultilinkDataGetInt(1)

// Inserir itens do pedido
insertItem is string = "INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade) VALUES (@PedidoID, @ProdutoID, @Quantidade)"
MultilinkSet("PedidoID", pedidoID)
MultilinkSet("ProdutoID", 12)
MultilinkSet("Quantidade", 5)
IF MultilinkSQLExec(insertItem) THEN
// Inserir impostos
insertImposto is string = "INSERT INTO Impostos (PedidoID, ImpostoID, Valor) VALUES (@PedidoID, @ImpostoID, @Valor)"
MultilinkSet("PedidoID", pedidoID)
MultilinkSet("ImpostoID", 3)
MultilinkSet("Valor", 50)
IF MultilinkSQLExec(insertImposto) THEN
MultilinkCommitTransaction()
Info("Pedido, itens e impostos inseridos com sucesso.")
ELSE
MultilinkRollbackTransaction()
Info("Erro ao inserir impostos, transação revertida.")
END
ELSE
MultilinkRollbackTransaction()
Info("Erro ao inserir itens, transação revertida.")
END
ELSE
MultilinkRollbackTransaction()
Info("Erro ao inserir pedido, transação revertida.")
END
MultilinkEndConnect()
END
ELSE
Info(MultilinkMSG())
END



Explicação:
Esses exemplos mostram como usar o MultiLink para inserir um pedido com itens e impostos relacionados. Eles utilizam transações para garantir a consistência dos dados, revertendo a transação se qualquer uma das inserções falhar.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:34
Exemplo 27: Relacionando Pedidos, Itens, Impostos e Clientes (Cenário Complexo com Otimização de Desempenho)
Objetivo:
Criar uma operação que vincule pedidos, itens, impostos e cliente

Cenário:
Um cliente realiza pedidos múltiplos, cada um com diversos itens e impostos associados. Este exemplo demonstra como realizar inserções de forma eficiente utilizando uma DLL MultiLink.

Código C#
c sustenido

Copiar código
using MultiLink;

class Program
{
static void Main()
{
// Configuração da conexão
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);

if (MSSQL_CLIENT.BEGIN_CONNECT())
{
if (MSSQL_CLIENT.BEGIN_TRANSACTION())
{
try
{
// Inserir cliente
string insertCliente = "INSERT INTO Clientes (Nome, Endereco) VALUES (@Nome, @Endereco)";
MSSQL_CLIENT.SET("Nome", "Cliente Exemplo");
MSSQL_CLIENT.SET("Endereco", "Rua Exemplo, 123");

if (!MSSQL_CLIENT.SQL_EXEC(insertCliente))
throw new Exception(MSSQL_CLIENT.MSG);

// Recuperar o ID do cliente inserido
MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS ClienteID");
int clienteID = Convert.ToInt32(MSSQL_CLIENT.DATA);

// Inserir pedido do cliente
string insertPedido = "INSERT INTO Pedidos (ClienteID, DataPedido) VALUES (@ClienteID, @DataPedido)";
MSSQL_CLIENT.SET("ClienteID", clienteID);
MSSQL_CLIENT.SET("DataPedido", DateTime.Now);

if (!MSSQL_CLIENT.SQL_EXEC(insertPedido))
throw new Exception(MSSQL_CLIENT.MSG);

// Recuperar o ID do pedido
MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS PedidoID");
int pedidoID = Convert.ToInt32(MSSQL_CLIENT.DATA);

// Inserir itens em lote
string insertItens = @"INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade)
VALUES
(@PedidoID, @ProdutoID1, @Quantidade1),
(@PedidoID, @ProdutoID2, @Quantidade2)";
MSSQL_CLIENT.SET("PedidoID", pedidoID);
MSSQL_CLIENT.SET("ProdutoID1", 101);
MSSQL_CLIENT.SET("Quantidade1", 2);
MSSQL_CLIENT.SET("ProdutoID2", 102);
MSSQL_CLIENT.SET("Quantidade2", 5);

if (!MSSQL_CLIENT.SQL_EXEC(insertItens))
throw new Exception(MSSQL_CLIENT.MSG);

// Inserir impostos em lote
string insertImpostos = @"INSERT INTO Impostos (PedidoID, ImpostoID, Valor)
VALUES
(@PedidoID, @ImpostoID1, @Valor1),
(@PedidoID, @ImpostoID2, @Valor2)";
MSSQL_CLIENT.SET("ImpostoID1", 1);
MSSQL_CLIENT.SET("Valor1", 50);
MSSQL_CLIENT.SET("ImpostoID2", 2);
MSSQL_CLIENT.SET("Valor2", 30);

if (!MSSQL_CLIENT.SQL_EXEC(insertImpostos))
throw new Exception(MSSQL_CLIENT.MSG);

// Calcular o total por cliente
string consulta = @"SELECT C.Nome, SUM(I.Valor) AS TotalImpostos
FROM Clientes C
JOIN Pedidos P ON C.ClienteID = P.ClienteID
JOIN Impostos I ON P.PedidoID = I.PedidoID
WHERE C.ClienteID = @ClienteID
GROUP BY C.Nome";
MSSQL_CLIENT.SET("ClienteID", clienteID);

if (MSSQL_CLIENT.SQL_QUERY(consulta))
{
Console.WriteLine(MSSQL_CLIENT.DATA);
}

// Commit da transação
MSSQL_CLIENT.COMMIT_TRANSACTION();
}
catch (Exception ex)
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Erro: " + ex.Message);
}
finally
{
MSSQL_CLIENT.END_CONNECT();
}
}
}
}
}


Descrição do código:

Configuração da Conexão: Configure as parâmetros de conexão com o banco de dados SQL Server utilizando uma DLL MultiLink.
Inserção de Cliente: Um novo cliente está inserido na tabela Clientes.
Recuperação do ID do Cliente: Após a inserção, o ID do cliente é recuperado para ser utilizado nas inserções subsequentes.
Inserção de Pedido: Um pedido é inserido associado ao cliente.
Recuperação do ID do Pedido: O ID do pedido é recuperado para uso posterior.
Inserção de Itens: Os itens do pedido são inseridos no lote na tabela Pedidos_Itens.
Inserção de Impostos: Os impostos correspondentes ao pedido são inseridos em lote na tabela Impostos.
Consulta de Total: É realizada uma consulta para calcular o total de impostos do cliente, agrupando pelo nome
Tratamento de Exceções: Caso ocorra algum erro durante o processo, a transação é revertida.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 24 octobre 2024 - 15:40
Membre enregistré
3 758 messages
Posté le 24 octobre 2024 - 15:42
Exemplo 28: Em Wlanguage este exemplo é o relacionamento de Pedidos, Itens, Impostos e Clientes (Cenário Complexo com Otimização de Desempenho)

Objetivo:
Criar uma operação que vincule pedidos, itens, impostos

Código WLanguage
widioma

Copiar código
// Configuração da conexão
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", True, True)

IF MSSQL_CLIENT.BEGIN_CONNECT() THEN
IF MSSQL_CLIENT.BEGIN_TRANSACTION() THEN
// Inserir cliente
clienteQuery is string = "INSERT INTO Clientes (Nome, Endereco) VALUES (@Nome, @Endereco)"

MSSQL_CLIENT.SET("Nome", "Cliente Exemplo")
MSSQL_CLIENT.SET("Endereco", "Rua Exemplo, 123")

IF NOT MSSQL_CLIENT.SQL_EXEC(clienteQuery) THEN
ERROR("Erro ao inserir cliente: " + MSSQL_CLIENT.MSG)

// Recuperar o ID do cliente inserido
MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS ClienteID")
clienteID is int = Num(MSSQL_CLIENT.DATA)

// Inserir pedido do cliente
pedidoQuery is string = "INSERT INTO Pedidos (ClienteID, DataPedido) VALUES (@ClienteID, @DataPedido)"

MSSQL_CLIENT.SET("ClienteID", clienteID)
MSSQL_CLIENT.SET("DataPedido", DateTimeSys())

IF NOT MSSQL_CLIENT.SQL_EXEC(pedidoQuery) THEN
ERROR("Erro ao inserir pedido: " + MSSQL_CLIENT.MSG)

// Recuperar o ID do pedido
MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS PedidoID")
pedidoID is int = Num(MSSQL_CLIENT.DATA)

// Inserir itens em lote
itensQuery is string = "INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade) VALUES (@PedidoID, @ProdutoID1, @Quantidade1), (@PedidoID, @ProdutoID2, @Quantidade2)"

MSSQL_CLIENT.SET("PedidoID", pedidoID)
MSSQL_CLIENT.SET("ProdutoID1", 101)
MSSQL_CLIENT.SET("Quantidade1", 2)
MSSQL_CLIENT.SET("ProdutoID2", 102)
MSSQL_CLIENT.SET("Quantidade2", 5)

IF NOT MSSQL_CLIENT.SQL_EXEC(itensQuery) THEN
ERROR("Erro ao inserir itens: " + MSSQL_CLIENT.MSG)

// Inserir impostos em lote
impostosQuery is string = "INSERT INTO Impostos (PedidoID, ImpostoID, Valor) VALUES (@PedidoID, @ImpostoID1, @Valor1), (@PedidoID, @ImpostoID2, @Valor2)"

MSSQL_CLIENT.SET("ImpostoID1", 1)
MSSQL_CLIENT.SET("Valor1", 50)
MSSQL_CLIENT.SET("ImpostoID2", 2)
MSSQL_CLIENT.SET("Valor2", 30)

IF NOT MSSQL_CLIENT.SQL_EXEC(impostosQuery) THEN
ERROR("Erro ao inserir impostos: " + MSSQL_CLIENT.MSG)

// Calcular o total por cliente
consultaQuery is string = "SELECT C.Nome, SUM(I.Valor) AS TotalImpostos " +
"FROM Clientes C " +
"JOIN Pedidos P ON C.ClienteID = P.ClienteID " +
"JOIN Impostos I ON P.PedidoID = I.PedidoID " +
"WHERE C.ClienteID = @ClienteID " +
"GROUP BY C.Nome"

MSSQL_CLIENT.SET("ClienteID", clienteID)

IF MSSQL_CLIENT.SQL_QUERY(consultaQuery) THEN
Info("Total de Impostos: " + MSSQL_CLIENT.DATA)

MSSQL_CLIENT.COMMIT_TRANSACTION()
ELSE
ERROR("Erro ao iniciar a transação: " + MSSQL_CLIENT.MSG)
ELSE
ERROR("Erro ao conectar ao banco: " + MSSQL_CLIENT.MSG)

MSSQL_CLIENT.END_CONNECT()

Descrição do código:

Configuração da Conexão: Configure as parâmetros de conexão com o banco de dados SQL Server utilizando uma DLL MultiLink.
Inserção de Cliente: Um novo cliente está inserido na tabela Clientes.
Recuperação do ID do Cliente: Após a inserção, o ID do cliente é recuperado para ser utilizado nas inserções subsequentes.
Inserção de Pedido: Um pedido é inserido associado ao cliente.
Recuperação do ID do Pedido: O ID do pedido é recuperado para uso posterior.
Inserção de Itens: Os itens do pedido são inseridos no lote na tabela Pedidos_Itens.
Inserção de Impostos: Os impostos correspondentes ao pedido são inseridos em lote na tabela Impostos.
Consulta de Total: É realizada uma consulta para calcular o total de impostos do cliente, agrupando pelo nome do cliente.
Tratamento de Exceções: Caso ocorra algum erro durante o processo, um erro é reportado.

Considerações Finais:

Este exemplo demonstra uma operação complexa envolvendo múltiplas tabelas e inserções em lote.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 26 octobre 2024 - 06:31
MultiLink ORACLE_CLIENT

Aqui está a documentação completa e detalhada para o ORACLE_CLIENT do MultiLink, cobrindo a funcionalidade, métodos e exemplos para uso em C# e WLanguage. Este documento foi criado para que desenvolvedores entendam o funcionamento e possam configurar conexões Oracle de diferentes maneiras (usando SID, TNS Name e Service Name), além de executar operações de transações e comandos SQL.

Visão Geral
O ORACLE_CLIENT do MultiLink é uma classe projetada para facilitar a conexão e interação com um banco de dados Oracle usando o driver Oracle.ManagedDataAccess.Client. Ele oferece métodos para:

Configurar e estabelecer conexões com diferentes opções (SID, TNS Name, Service Name).
Executar comandos SQL.
Manipular transações.
Configurar parâmetros de consulta.
Requisitos
Driver: Oracle.ManagedDataAccess.Client.
Dependências: Oracle.ManagedDataAccess.dll, Newtonsoft.Json.dll (para conversão de resultados em JSON).
Propriedades Principais
MSG: Armazena mensagens de status ou erro das operações realizadas.
DATA: Armazena o resultado das consultas SQL em formato JSON, facilitando o acesso aos dados retornados.
Métodos
Configuração da Conexão
A classe ORACLE_CLIENT permite configurar a conexão com o banco de dados Oracle usando três métodos diferentes: SID, TNS Name e Service Name. Cada um dos métodos abaixo configura a ConnectionString da classe.

1. ConfigureWithSID
Configura a conexão com o banco de dados Oracle usando SID.

Parâmetros:
server (string): O endereço do servidor Oracle.
port (string): A porta do servidor Oracle.
sid (string): O SID do banco de dados.
user (string): Nome de usuário para autenticação.
password (string): Senha para autenticação.
Exemplo de Uso
C#:

csharp
Copiar código
ORACLE_CLIENT.ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword");
WLanguage:

wlanguage
Copiar código
ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword")
2. ConfigureWithTNSName
Configura a conexão usando um TNS Name predefinido em tnsnames.ora.

Parâmetros:
tnsAlias (string): Nome do alias configurado.
user (string): Nome de usuário para autenticação.
password (string): Senha para autenticação.
Exemplo de Uso
C#:

csharp
Copiar código
ORACLE_CLIENT.ConfigureWithTNSName("MyTNSAlias", "myUser", "myPassword");
WLanguage:

wlanguage
Copiar código
ConfigureWithTNSName("MyTNSAlias", "myUser", "myPassword")
3. ConfigureWithServiceName
Configura a conexão com Service Name, que é uma alternativa ao SID.

Parâmetros:
server (string): O endereço do servidor Oracle.
port (string): A porta do servidor Oracle.
serviceName (string): O Service Name do banco de dados.
user (string): Nome de usuário para autenticação.
password (string): Senha para autenticação.
Exemplo de Uso
C#:

csharp
Copiar código
ORACLE_CLIENT.ConfigureWithServiceName("myServer", "1521", "myServiceName", "myUser", "myPassword");
WLanguage:

wlanguage
Copiar código
ConfigureWithServiceName("myServer", "1521", "myServiceName", "myUser", "myPassword")
Conexão e Desconexão com o Banco de Dados
4. BEGIN_CONNECT
Estabelece a conexão com o banco de dados. Valida a licença e verifica se a configuração de conexão foi definida.

Retorno: (bool) true se a conexão for bem-sucedida, false caso contrário.
Exemplo de Uso
C#:

csharp
Copiar código
bool connected = ORACLE_CLIENT.BEGIN_CONNECT();
WLanguage:

wlanguage
Copiar código
bConnected = ORACLE_CLIENT:BEGIN_CONNECT()
5. END_CONNECT
Encerra a conexão com o banco de dados.

Retorno: (bool) true se a desconexão for bem-sucedida.
Exemplo de Uso
C#:

csharp
Copiar código
bool disconnected = ORACLE_CLIENT.END_CONNECT();
WLanguage:

wlanguage
Copiar código
bDisconnected = ORACLE_CLIENT:END_CONNECT()
Transações
6. BEGIN_TRANSACTION
Inicia uma transação. Isso permite agrupar múltiplas operações que podem ser confirmadas ou revertidas.

Retorno: (bool) true se a transação for iniciada com sucesso.
Exemplo de Uso
C#:

csharp
Copiar código
bool transactionStarted = ORACLE_CLIENT.BEGIN_TRANSACTION();
WLanguage:

wlanguage
Copiar código
bTransactionStarted = ORACLE_CLIENT:BEGIN_TRANSACTION()
7. COMMIT_TRANSACTION
Confirma a transação ativa no banco de dados.

Parâmetro:

autoRollbackIfFails (bool): Define se a transação deve ser revertida automaticamente em caso de erro.
Retorno: (bool) true se a confirmação for bem-sucedida.

Exemplo de Uso
C#:

csharp
Copiar código
bool committed = ORACLE_CLIENT.COMMIT_TRANSACTION(true);
WLanguage:

wlanguage
Copiar código
bCommitted = ORACLE_CLIENT:COMMIT_TRANSACTION(True)
8. ROLLBACK_TRANSACTION
Reverte a transação ativa.

Retorno: (bool) true se a reversão for bem-sucedida.
Exemplo de Uso
C#:

csharp
Copiar código
bool rolledBack = ORACLE_CLIENT.ROLLBACK_TRANSACTION();
WLanguage:

wlanguage
Copiar código
bRolledBack = ORACLE_CLIENT:ROLLBACK_TRANSACTION()
Execução de Comandos SQL
9. SQL_EXEC
Executa um comando SQL (sem retorno de dados). Este método é útil para operações como INSERT, UPDATE ou DELETE.

Parâmetro:

sql (string): A instrução SQL a ser executada.
Retorno: (bool) true se o comando for executado com sucesso.

Exemplo de Uso
C#:

csharp
Copiar código
bool executed = ORACLE_CLIENT.SQL_EXEC("INSERT INTO TableName (Col) VALUES (Value)");
WLanguage:

wlanguage
Copiar código
bExecuted = ORACLE_CLIENT:SQL_EXEC("INSERT INTO TableName (Col) VALUES (Value)")
10. SQL_QUERY
Executa uma consulta SQL e armazena o resultado em DATA como JSON.

Parâmetro:

sql (string): A consulta SQL a ser executada.
Retorno: (bool) true se a consulta for executada com sucesso.

Exemplo de Uso
C#:

csharp
Copiar código
bool fetched = ORACLE_CLIENT.SQL_QUERY("SELECT * FROM TableName");
string data = ORACLE_CLIENT.DATA; // Resultados em JSON
WLanguage:

wlanguage
Copiar código
bFetched = ORACLE_CLIENT:SQL_QUERY("SELECT * FROM TableName")
sData = ORACLE_CLIENT.DATA // Resultados em JSON
Definindo Parâmetros para Consultas
11. SET_PARAM
Define um parâmetro para ser utilizado em uma consulta SQL.

Parâmetros:
parameter (string): Nome do parâmetro.
value (string): Valor do parâmetro.
Exemplo de Uso
C#:

csharp
Copiar código
ORACLE_CLIENT.SET_PARAM("paramName", "value");
WLanguage:

wlanguage
Copiar código
ORACLE_CLIENT:SET_PARAM("paramName", "value")


Resumo e Considerações Finais

O ORACLE_CLIENT do MultiLink oferece uma interface estruturada e robusta para gerenciar conexões, transações e executar comandos SQL em um banco de dados Oracle. Essa documentação fornece uma visão clara de como configurar e utilizar cada método. Com as funcionalidades descritas, o ORACLE_CLIENT simplifica o gerenciamento de conexões Oracle para desenvolvedores, com suporte para uso em diferentes ambientes de desenvolvimento (C# e WLanguage).

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 26 octobre 2024 - 06:35
Aqui estão os exemplos de conexão para C# e suas correspondentes implementações em WLanguage para cada tipo de conexão (SID, TNS Name, e Service Name) com o banco de dados Oracle.

1. Conexão usando SID
Em C#

using Oracle.ManagedDataAccess.Client;
public static void ConfigureWithSID(string server, string port, string sid, string user, string password)
{
OracleConnectionStringBuilder sb = new OracleConnectionStringBuilder
{
DataSource = $"{server}:{port}/{sid}",
UserID = user,
Password = password
};
_connectionInfo = sb;
}


Exemplo de Uso:
csharp

ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword");


Em WLanguage
wlanguage

PROCEDURE ConfigureWithSID(server is string, port is string, sid is string, user is string, password is string)
DataSource = server + ":" + port + "/" + sid
UserID = user
Password = password
Exemplo de Uso:
wlanguage
Copiar código
ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword")


2. Conexão usando TNS Name
Em C#

public static void ConfigureWithTNSName(string tnsAlias, string user, string password)
{
OracleConnectionStringBuilder sb = new OracleConnectionStringBuilder
{
DataSource = tnsAlias,
UserID = user,
Password = password
};
_connectionInfo = sb;
}


Exemplo de Uso:
csharp

ConfigureWithTNSName("MyTNSAlias", "myUser", "myPassword");

Em WLanguage

PROCEDURE ConfigureWithTNSName(tnsAlias is string, user is string, password is string)
DataSource = tnsAlias
UserID = user
Password = password
Exemplo de Uso:
wlanguage
Copiar código
ConfigureWithTNSName("MyTNSAlias", "myUser", "myPassword")


3. Conexão usando Service Name
Em C#

public static void ConfigureWithServiceName(string server, string port, string serviceName, string user, string password)
{
OracleConnectionStringBuilder sb = new OracleConnectionStringBuilder
{
DataSource = $"//{server}:{port}/{serviceName}",
UserID = user,
Password = password
};
_connectionInfo = sb;
}


Exemplo de Uso:
csharp

ConfigureWithServiceName("myServer", "1521", "myServiceName", "myUser", "myPassword");


Em WLanguage

PROCEDURE ConfigureWithServiceName(server is string, port is string, serviceName is string, user is string, password is string)
DataSource = "//" + server + ":" + port + "/" + serviceName
UserID = user
Password = password


Exemplo de Uso:
wlanguage

ConfigureWithServiceName("myServer", "1521", "myServiceName", "myUser", "myPassword")

Em Resumo
Esses exemplos mostram como configurar a conexão tanto em C# quanto em WLanguage para acessar um banco de dados Oracle usando SID, TNS Name, ou Service Name.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 26 octobre 2024 - 06:36
Abaixo estão exemplos de conexões com diferentes tipos de configuração no driver Oracle.ManagedDataAccess.Client. Vou mostrar como configurar a ConnectionString para conectar-se usando SID, TNS Name e Service Name para Oracle.

1. Conexão usando SID
Quando você conhece o SID do banco de dados Oracle, pode usar uma ConnectionString com o seguinte formato:

csharp

using Oracle.ManagedDataAccess.Client;

public static void ConfigureWithSID(string server, string port, string sid, string user, string password)
{
var sb = new OracleConnectionStringBuilder
{
DataSource = $"{server}:{port}/{sid}",
UserID = user,
Password = password
};
_connectionInfo = sb;
}


Exemplo de uso:
csharp

ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword");


2. Conexão usando TNS Name
Para usar um alias definido no arquivo tnsnames.ora, você só precisa configurar a propriedade DataSource para o nome do alias.

csharp
Copiar código
public static void ConfigureWithTNSName(string tnsAlias, string user, string password)
{
var sb = new OracleConnectionStringBuilder
{
DataSource = tnsAlias,
UserID = user,
Password = password
};
_connectionInfo = sb;
}


Exemplo de uso:
csharp

ConfigureWithTNSName("MyTNSAlias", "myUser", "myPassword");


3. Conexão usando Service Name
Ao conectar-se por Service Name, a ConnectionString segue o formato //<server>:<port>/<ServiceName>. Isso é útil quando o banco de dados possui um Service Name específico.

csharp

public static void ConfigureWithServiceName(string server, string port, string serviceName, string user, string password)
{
var sb = new OracleConnectionStringBuilder
{
DataSource = $"//{server}:{port}/{serviceName}",
UserID = user,
Password = password
};
_connectionInfo = sb;
}


Exemplo de uso:
csharp

ConfigureWithServiceName("myServer", "1521", "myServiceName", "myUser", "myPassword");

Resumo dos Exemplos
Cada um desses métodos cria uma configuração para conectar ao banco de dados Oracle usando as propriedades DataSource, UserID, e Password de acordo com o tipo de conexão. Esses exemplos podem ser chamados antes do método BEGIN_CONNECT() no código atual para estabelecer a conexão com o banco de dados Oracle usando o driver Oracle.ManagedDataAccess.Client.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 26 octobre 2024 - 06:40
Documentação para a Classe ORACLE_CLIENT - MultiLink

A classe ORACLE_CLIENT fornece métodos para gerenciar conexões, transações e execução de comandos SQL em um banco de dados Oracle. A classe inclui métodos para configurar a conexão, iniciar e encerrar a conexão, manipular transações, definir parâmetros e executar comandos SQL. A comunicação com o banco de dados é feita usando a biblioteca Oracle.ManagedDataAccess.Client.

Propriedades
MSG: (string) Mantém uma mensagem de status relacionada às operações realizadas.
DATA: (string) Armazena os resultados da consulta SQL como JSON.
Métodos


1. CONFIGURE
Configura as informações de conexão para o banco de dados Oracle.

Parâmetros:

server (string): O endereço do servidor Oracle.
user (string): Nome de usuário do banco de dados.
password (string): Senha do banco de dados.
Exemplo:

C#:

csharp

ORACLE_CLIENT.CONFIGURE("myserver", "myuser", "mypassword");
WLanguage:



wlanguage

ORACLE_CLIENT:CONFIGURE("myserver", "myuser", "mypassword")



2. BEGIN_CONNECT
Estabelece a conexão com o banco de dados.

Retorno: (bool) true se a conexão for bem-sucedida, caso contrário, false.

Exemplo:

C#:

bool connected = ORACLE_CLIENT.BEGIN_CONNECT();
WLanguage:

bConnected = ORACLE_CLIENT:BEGIN_CONNECT()


3. END_CONNECT
Encerra a conexão com o banco de dados Oracle.

Retorno: (bool) true se a desconexão for bem-sucedida.

Exemplo:

C#:

bool disconnected = ORACLE_CLIENT.END_CONNECT();


WLanguage:

bDisconnected = ORACLE_CLIENT:END_CONNECT()


4. BEGIN_TRANSACTION
Inicia uma transação no banco de dados.

Retorno: (bool) true se a transação for iniciada com sucesso.

Exemplo:

C#:

bool transactionStarted = ORACLE_CLIENT.BEGIN_TRANSACTION();


WLanguage:

bTransactionStarted = ORACLE_CLIENT:BEGIN_TRANSACTION()


5. COMMIT_TRANSACTION
Confirma a transação ativa.

Parâmetro:

autoRollbackIfFails (bool, opcional): Se true, reverte automaticamente a transação em caso de falha.
Retorno: (bool) true se a confirmação for bem-sucedida.

Exemplo:

C#:

bool committed = ORACLE_CLIENT.COMMIT_TRANSACTION(true);


WLanguage:

bCommitted = ORACLE_CLIENT:COMMIT_TRANSACTION(True)


6. ROLLBACK_TRANSACTION
Reverte a transação ativa.

Retorno: (bool) true se a reversão for bem-sucedida.

Exemplo:

C#:

bool rolledBack = ORACLE_CLIENT.ROLLBACK_TRANSACTION();


WLanguage:

bRolledBack = ORACLE_CLIENT:ROLLBACK_TRANSACTION()


7. SET_PARAM
Define um parâmetro para ser utilizado em uma consulta SQL.

Parâmetros:

parameter (string): O nome do parâmetro.
value (string): O valor do parâmetro.
Exemplo:

C#:

ORACLE_CLIENT.SET_PARAM("paramName", "value");


WLanguage:

ORACLE_CLIENT:SET_PARAM("paramName", "value")


8. SQL_EXEC
Executa um comando SQL (sem retorno de dados).

Parâmetro:

sql (string): A instrução SQL a ser executada.
Retorno: (bool) true se o comando for executado com sucesso.

Exemplo:

C#:

bool executed = ORACLE_CLIENT.SQL_EXEC("INSERT INTO TableName (Col) VALUES (Value)");


WLanguage:

bExecuted = ORACLE_CLIENT:SQL_EXEC("INSERT INTO TableName (Col) VALUES (Value)")

9. SQL_QUERY
Executa uma consulta SQL e armazena o resultado em DATA como JSON.

Parâmetro:

sql (string): A consulta SQL a ser executada.
Retorno: (bool) true se a consulta for executada com sucesso.

Exemplo:

C#:

bool fetched = ORACLE_CLIENT.SQL_QUERY("SELECT * FROM TableName");
string data = ORACLE_CLIENT.DATA; // Resultados em JSON

WLanguage:

bFetched = ORACLE_CLIENT:SQL_QUERY("SELECT * FROM TableName")
sData = ORACLE_CLIENT.DATA // Resultados em JSON

EM RESUMO
Esses exemplos e descrições podem servir como documentação de referência para os desenvolvedores, permitindo o uso tanto em C# quanto em WLanguage. Se precisar de uma formatação adicional para um formato de documento, como PDF ou HTML, estou à disposição para ajustar.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 23 novembre 2024 - 17:12
//EXEMPLO COM TRANSACTION

POSTGRESQL_CLIENT.CONFIGURE("localhost",15432,"postgres","123456","postgres","public") // configuracao da conexao (pode ser feito 1x no start do app)
IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN // abrir conexao

POSTGRESQL_CLIENT.BEGIN_TRANSACTION() // inicia a transacao

// operações com várias tabelas

confirmado is boolean = POSTGRESQL_CLIENT.COMMIT_TRANSACTION(True) // commit com rollback automatico se falha

// se optar por chamar .COMMIT_TRANSACTION(False)
// então deve controlar a chamada de .ROLLBACK_TRANSACTION() manualmente
// ex.:
// POSTGRESQL_CLIENT.ROLLBACK_TRANSACTION() // desfaz todas as alterações feitas desde BEGIN_TRANSACTION()

POSTGRESQL_CLIENT.END_CONNECT() // Se nao fechar a conexão o banco vai travar com o tempo !!!
ELSE
Info(POSTGRESQL_CLIENT.MSG)
END

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 23 novembre 2024 - 17:13
//EXEMPLO DE INSERT E UPDATE

POSTGRESQL_CLIENT.CONFIGURE("localhost",15432,"postgres","123456","postgres","public") // configuracao da conexao (pode ser feito 1x no start do app)
IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN // abrir conexao

// exemplo de insert/update com parametros seguros
// NÃO FAÇA concatenações na string da query interpolando os parametros
// NAO É SEGURO!!!
// Use PARAMETROS como mostrado abaixo
POSTGRESQL_CLIENT.SET("@nome", "Valor Seguro")
POSTGRESQL_CLIENT.SET("@telefone", "Valor Seguro")
POSTGRESQL_CLIENT.SET("@email", "Valor Seguro")

// a funcao SQL_EXEC é ppara insert/update/funcoes administrativas do BD
atualizado is boolean = POSTGRESQL_CLIENT.SQL_EXEC("Insert (ou update) into Tabela (Nome, Telefone, Email) values (@nome, @telefone, @email")

IF atualizado THEN
// deu certo
ELSE
msgErro is string = POSTGRESQL_CLIENT.MSG // recupera a msg de erro
END

POSTGRESQL_CLIENT.END_CONNECT() // Se nao fechar a conexão o banco vai travar com o tempo !!!
ELSE
Info(POSTGRESQL_CLIENT.MSG)
END

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 23 novembre 2024 - 17:13
//SELECT RETORNA JSON

POSTGRESQL_CLIENT.CONFIGURE("localhost",15432,"postgres","123456","postgres","public") // configuracao da conexao (pode ser feito 1x no start do app)
IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN // abrir conexao
POSTGRESQL_CLIENT.SQL_QUERY("select * from clientes") // funcao de leitura com retorno JSON

resultado is Variant = POSTGRESQL_CLIENT.DATA // <- acess os dados de retorno assim
mensagem is string = POSTGRESQL_CLIENT.MSG // <- acesse mensagens de erro ou info assim
// fazer uso dos dados ou enviar para tela...

POSTGRESQL_CLIENT.END_CONNECT() // Se nao fechar a conexão o banco vai travar com o tempo !!!
ELSE
Info(POSTGRESQL_CLIENT.MSG)
END

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 23 novembre 2024 - 17:14
//SELECT COM RETORNO DATA SORCE RECORD SET

POSTGRESQL_CLIENT.CONFIGURE("localhost",15432,"postgres","123456","postgres","public")
IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN // abrir conexao

// esse exemplo mostra a funcao de query com leitura sequencial
// essa modalidade permite uma leitura muito mais rapida dos dados
// pois a leitura é feita no nivel do Result-Set da query

POSTGRESQL_CLIENT.SQL_QUERY_SEQ("select * from clientes") // funcao de leitura via result-set (iteração direta)

WHILE POSTGRESQL_CLIENT.TEM_LINHAS() // avança linha

valId is string= POSTGRESQL_CLIENT.VAL_COLUNA(0) // ordem das colunas no result da query
valNome is string = POSTGRESQL_CLIENT.VAL_COLUNA(1)

ToastDisplay(valId +CR+ valNome )

// fazer uso dos dados ou enviar para tela
END

POSTGRESQL_CLIENT.END_CONNECT() // Se nao fechar a conexão o banco vai travar com o tempo !!!

ELSE
Info(POSTGRESQL_CLIENT.MSG)
END

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membre enregistré
3 758 messages
Posté le 23 novembre 2024 - 17:24




HELP

















--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 23 novembre 2024 - 17:26