PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → DRIVER NATIVO MULTILINK DATABASE WX SOLUÇÕES - MANUAL
DRIVER NATIVO MULTILINK DATABASE WX SOLUÇÕES - MANUAL
Iniciado por Boller, out., 24 2024 2:43 PM - 33 respostas
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 2:43 PM




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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:17 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:21 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:22 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:23 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:23 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:24 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:24 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:25 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:26 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:27 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:28 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:29 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:30 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:30 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:31 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:32 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:32 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:33 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:34 PM
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/
Mensagem modificada, outubro, 24 2024 - 3:40 PM
Membro registado
4.520 mensagems
Publicado em outubro, 24 2024 - 3:42 PM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 26 2024 - 6:31 AM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 26 2024 - 6:35 AM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 26 2024 - 6:36 AM
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/
Membro registado
4.520 mensagems
Publicado em outubro, 26 2024 - 6:40 AM
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/
Membro registado
4.520 mensagems
Publicado em novembro, 23 2024 - 5:12 PM
//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/
Membro registado
4.520 mensagems
Publicado em novembro, 23 2024 - 5:13 PM
//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/
Membro registado
4.520 mensagems
Publicado em novembro, 23 2024 - 5:13 PM
//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/
Membro registado
4.520 mensagems
Publicado em novembro, 23 2024 - 5:14 PM
//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/
Membro registado
4.520 mensagems
Publicado em novembro, 23 2024 - 5:24 PM




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/
Mensagem modificada, novembro, 23 2024 - 5:26 PM
Membro registado
4.520 mensagems
Publicado em junho, 19 2025 - 3:06 PM
Below is a structured presentation outline for showcasing the usage of Multilink Database, a powerful solution for data integration across multiple database systems, as provided by WX Soluções. The presentation includes an overview, key features, benefits, and practical code examples in both C# and WLanguage to demonstrate its functionality. The content is based on the provided documents and focuses on real-world applications.

Presentation: Multilink Database - Streamlining Data Integration
Slide 1: Introduction to Multilink Database
• What is Multilink Database?
◦ A robust solution by WX Soluções for seamless integration and management of multiple database systems.
◦ Supports a wide range of databases, including MS SQL Server, Oracle, PostgreSQL, MySQL, Redis, and more.
◦ Designed for developers to simplify connections, execute SQL commands, manage transactions, and handle email notifications.
• Why Multilink?
◦ High performance, scalability, and secure data handling.
◦ Compatible with C#, WLanguage, and various ERP/CRM systems.
◦ User-friendly interface for both novice and experienced developers.
Visual: Logo of Multilink Database (if available) and a diagram showing connectivity to various databases.

Slide 2: Key Features
• Multi-Database Support:
◦ MS SQL Server, Oracle, PostgreSQL, MySQL, MariaDB, SQLite, Redis, and more.
◦ Upcoming support for additional databases.
• Core Functionalities:
◦ Native database connections with secure SSL support.
◦ JSON data serialization for easy data handling.
◦ Transaction management (BEGIN, COMMIT, ROLLBACK).
◦ Email notifications with text/HTML and attachment support.
◦ Integration with platforms like Firebase, Elasticsearch, and Redis.
• Security & Efficiency:
◦ Parameterized queries to prevent SQL injection.
◦ Data compression and optimized performance for large datasets.
Visual: Icons representing supported databases and a checklist of features.

Slide 3: Benefits for Users
• For Developers:
◦ Simplifies database connectivity with a unified API.
◦ Reduces development time with intuitive methods.
◦ Supports both C# and WLanguage for cross-platform development.
• For Businesses:
◦ Scalable solution for growing data needs.
◦ Enhanced security for sensitive data.
◦ Seamless integration with existing ERP/CRM systems.
• Ease of Use:
◦ Intuitive interface for non-technical users.
◦ Comprehensive documentation and community support.
Visual: A comparison table showing Multilink vs. traditional database connectors (e.g., faster integration, broader compatibility).

Slide 4: Getting Started with Multilink
• Installation:
◦ Download the Multilink driver from https://repository.windev.com.
◦ Reference the manual at PC SOFT Forum.
• Dependencies:
◦ For Oracle: Oracle.ManagedDataAccess.dll, Newtonsoft.Json.dll.
◦ For other databases: Relevant native drivers.
• Setup:
◦ Configure connection parameters (server, user, password, database, etc.).
◦ Use provided classes like MSSQL_CLIENT, ORACLE_CLIENT, or POSTGRESQL_CLIENT.
Visual: Screenshot of the download page or a step-by-step setup guide.

Slide 5: Example 1 - Connecting to MS SQL Server
Objective: Connect to an MS SQL Server database, execute a query, and retrieve results in JSON.
C# Example



using Multilink;

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

if (MSSQL_CLIENT.BEGIN_CONNECT())
{
Console.WriteLine("Connected to database!");
// Execute query
MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Clientes WHERE ClienteID = @ClienteID");
MSSQL_CLIENT.SET("ClienteID", 1001);
Console.WriteLine(MSSQL_CLIENT.DATA); // Results in JSON
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine("Error: " + MSSQL_CLIENT.MSG);
}
}
}


WLanguage Example


MultilinkConfigure("server_name", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
Info("Connected to database!")
MultilinkSQLQuery("SELECT * FROM Clientes WHERE ClienteID = @ClienteID")
MultilinkSet("ClienteID", 1001)
Info(MultilinkDATA())
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END


Explanation:
• Configures a secure connection to MS SQL Server.
• Executes a parameterized SELECT query to retrieve client data.
• Returns results in JSON format for easy processing.
Visual: Code snippets side-by-side with a diagram of the connection flow.

Slide 6: Example 2 - Transaction Management with PostgreSQL
Objective: Insert a new record into a PostgreSQL database with transaction control to ensure data consistency.


C# Example

using Multilink;

class Program
{
static void Main()
{
POSTGRESQL_CLIENT.CONFIGURE("localhost", 15432, "postgres", "123456", "postgres", "public");

if (POSTGRESQL_CLIENT.BEGIN_CONNECT())
{
if (POSTGRESQL_CLIENT.BEGIN_TRANSACTION())
{
POSTGRESQL_CLIENT.SET("@nome", "John Doe");
POSTGRESQL_CLIENT.SET("@email", "john@example.com");
bool inserted = POSTGRESQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Email) VALUES (@nome, @email)");

if (inserted)
{
POSTGRESQL_CLIENT.COMMIT_TRANSACTION(true);
Console.WriteLine("Insert successful!");
}
else
{
POSTGRESQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Error: " + POSTGRESQL_CLIENT.MSG);
}
}
POSTGRESQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine("Error: " + POSTGRESQL_CLIENT.MSG);
}
}
}


WLanguage Example


POSTGRESQL_CLIENT.CONFIGURE("localhost", 15432, "postgres", "123456", "postgres", "public")
IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN
IF POSTGRESQL_CLIENT.BEGIN_TRANSACTION() THEN
POSTGRESQL_CLIENT.SET("@nome", "John Doe")
POSTGRESQL_CLIENT.SET("@email", "john@example.com")
atualizado is boolean = POSTGRESQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Email) VALUES (@nome, @email)")
IF atualizado THEN
POSTGRESQL_CLIENT.COMMIT_TRANSACTION(True)
Info("Insert successful!")
ELSE
POSTGRESQL_CLIENT.ROLLBACK_TRANSACTION()
Info(POSTGRESQL_CLIENT.MSG)
END
END
POSTGRESQL_CLIENT.END_CONNECT()
ELSE
Info(POSTGRESQL_CLIENT.MSG)
END


Explanation:
• Establishes a connection to a PostgreSQL database.
• Uses a transaction to ensure the INSERT operation is atomic.
• Commits the transaction on success or rolls back on failure.
Visual: Flowchart of transaction process (BEGIN → EXEC → COMMIT/ROLLBACK).

Slide 7: Example 3 - Email Notifications
Objective: Update a record and send an email notification to the client using Multilink’s email functionality.

C# Example

using Multilink;

class Program
{
static void Main()
{
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
if (MSSQL_CLIENT.BEGIN_CONNECT())
{
MSSQL_CLIENT.SET("Status", "Shipped");
MSSQL_CLIENT.SET("PedidoID", 1000);
MSSQL_CLIENT.SQL_EXEC("UPDATE Pedidos SET Status = @Status WHERE PedidoID = @PedidoID");

// Send email notification
EMAIL_CLIENT.CONFIGURE("smtp.server.com", 587, true, "user@server.com", "password");
EMAIL_CLIENT.TEXT_EMAIL("cliente@exemplo.com", "Order Shipped", "Your order has been shipped.");
Console.WriteLine(MSSQL_CLIENT.MSG);
MSSQL_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine("Error: " + MSSQL_CLIENT.MSG);
}
}
}


WLanguage Example

MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() THEN
MultilinkSet("Status", "Shipped")
MultilinkSet("PedidoID", 1000)
MultilinkSQLExec("UPDATE Pedidos SET Status = @Status WHERE PedidoID = @PedidoID")

MultilinkEmailConfigure("smtp.server.com", 587, True, "user@server.com", "password")
MultilinkEmailText("cliente@exemplo.com", "Order Shipped", "Your order has been shipped.")
Info(MultilinkMSG())
MultilinkEndConnect()
ELSE
Info(MultilinkMSG())
END


Explanation:
• Updates the status of an order in the database.
• Sends a text-based email notification to the client.
• Demonstrates Multilink’s ability to handle both database operations and email communication.
Visual: Diagram showing database update followed by email dispatch.

Slide 8: Example 4 - Oracle Database Connection
Objective: Connect to an Oracle database using SID and retrieve data.

C# Example

using Multilink;

class Program
{
static void Main()
{
ORACLE_CLIENT.ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword");

if (ORACLE_CLIENT.BEGIN_CONNECT())
{
Console.WriteLine("Connected to Oracle database!");
ORACLE_CLIENT.SQL_QUERY("SELECT * FROM Employees WHERE DepartmentID = :deptID");
ORACLE_CLIENT.SET_PARAM("deptID", "10");
Console.WriteLine(ORACLE_CLIENT.DATA); // Results in JSON
ORACLE_CLIENT.END_CONNECT();
}
else
{
Console.WriteLine("Error: " + ORACLE_CLIENT.MSG);
}
}
}


WLanguage Example

ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword")
IF ORACLE_CLIENT:BEGIN_CONNECT() THEN
Info("Connected to Oracle database!")
ORACLE_CLIENT:SQL_QUERY("SELECT * FROM Employees WHERE DepartmentID = :deptID")
ORACLE_CLIENT:SET_PARAM("deptID", "10")
Info(ORACLE_CLIENT.DATA)
ORACLE_CLIENT:END_CONNECT()
ELSE
Info(ORACLE_CLIENT.MSG)
END


Explanation:
• Configures a connection to an Oracle database using SID.
• Executes a parameterized query to retrieve employee data.
• Returns results in JSON format.
Visual: Oracle logo with a connection flow diagram.

Slide 9: Example 5 - Complex Transaction with Multiple Tables
Objective: Insert a client, order, items, and taxes in a single transaction.

C# Example

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())
{
try
{
// Insert client
MSSQL_CLIENT.SET("Nome", "Cliente Exemplo");
MSSQL_CLIENT.SET("Endereco", "Rua Exemplo, 123");
if (!MSSQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Endereco) VALUES (@Nome, @Endereco)"))
throw new Exception(MSSQL_CLIENT.MSG);

MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS ClienteID");
int clienteID = Convert.ToInt32(MSSQL_CLIENT.DATA);

// Insert order
MSSQL_CLIENT.SET("ClienteID", clienteID);
MSSQL_CLIENT.SET("DataPedido", DateTime.Now);
if (!MSSQL_CLIENT.SQL_EXEC("INSERT INTO Pedidos (ClienteID, DataPedido) VALUES (@ClienteID, @DataPedido)"))
throw new Exception(MSSQL_CLIENT.MSG);

MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS PedidoID");
int pedidoID = Convert.ToInt32(MSSQL_CLIENT.DATA);

// Insert items
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("INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade) VALUES (@PedidoID, @ProdutoID1, @Quantidade1), (@PedidoID, @ProdutoID2, @Quantidade2)"))
throw new Exception(MSSQL_CLIENT.MSG);

// Insert taxes
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("INSERT INTO Impostos (PedidoID, ImpostoID, Valor) VALUES (@PedidoID, @ImpostoID1, @Valor1), (@PedidoID, @ImpostoID2, @Valor2)"))
throw new Exception(MSSQL_CLIENT.MSG);

MSSQL_CLIENT.COMMIT_TRANSACTION();
Console.WriteLine("Transaction successful!");
}
catch (Exception ex)
{
MSSQL_CLIENT.ROLLBACK_TRANSACTION();
Console.WriteLine("Error: " + ex.Message);
}
MSSQL_CLIENT.END_CONNECT();
}
}
}


WLanguage Example

MultilinkConfigure("server", "user", "password", "database", True, True)
IF MultilinkBeginConnect() AND MultilinkBeginTransaction() THEN
clienteQuery is string = "INSERT INTO Clientes (Nome, Endereco) VALUES (@Nome, @Endereco)"
MultilinkSet("Nome", "Cliente Exemplo")
MultilinkSet("Endereco", "Rua Exemplo, 123")
IF NOT MultilinkSQLExec(clienteQuery) THEN
ERROR("Erro ao inserir cliente: " + MultilinkMSG())
END

MultilinkSQLQuery("SELECT SCOPE_IDENTITY() AS ClienteID")
clienteID is int = Num(MultilinkDATA())

pedidoQuery is string = "INSERT INTO Pedidos (ClienteID, DataPedido) VALUES (@ClienteID, @DataPedido)"
MultilinkSet("ClienteID", clienteID)
MultilinkSet("DataPedido", Today())
IF NOT MultilinkSQLExec(pedidoQuery) THEN
ERROR("Erro ao inserir pedido: " + MultilinkMSG())
END

MultilinkSQLQuery("SELECT SCOPE_IDENTITY() AS PedidoID")
pedidoID is int = Num(MultilinkDATA())

itensQuery is string = "INSERT INTO Pedidos_Itens (PedidoID, ProdutoID, Quantidade) VALUES (@PedidoID, @ProdutoID1, @Quantidade1), (@PedidoID, @ProdutoID2, @Quantidade2)"
MultilinkSet("PedidoID", pedidoID)
MultilinkSet("ProdutoID1", 101)
MultilinkSet("Quantidade1", 2)
MultilinkSet("ProdutoID2", 102)
MultilinkSet("Quantidade2", 5)
IF NOT MultilinkSQLExec(itensQuery) THEN
ERROR("Erro ao inserir itens: " + MultilinkMSG())
END

impostosQuery is string = "INSERT INTO Impostos (PedidoID, ImpostoID, Valor) VALUES (@PedidoID, @ImpostoID1, @Valor1), (@PedidoID, @ImpostoID2, @Valor2)"
MultilinkSet("ImpostoID1", 1)
MultilinkSet("Valor1", 50)
MultilinkSet("ImpostoID2", 2)
MultilinkSet("Valor2", 30)
IF NOT MultilinkSQLExec(impostosQuery) THEN
ERROR("Erro ao inserir impostos: " + MultilinkMSG())
END

MultilinkCommitTransaction()
Info("Transaction successful!")
ELSE
MultilinkRollbackTransaction()
Info("Erro ao conectar ou iniciar transação: " + MultilinkMSG())
END
MultilinkEndConnect()


Explanation:
• Performs a complex transaction involving multiple tables (Clientes, Pedidos, Pedidos_Itens, Impostos).
• Uses batch inserts for efficiency.
• Ensures data consistency with transaction management.
Visual: ER diagram of the tables involved and a transaction flowchart.

Slide 10: Real-World Applications
• E-Commerce:
◦ Manage orders, customers, and inventory across multiple databases.
◦ Send automated email notifications for order updates.
• Enterprise Systems:
◦ Integrate with ERP/CRM systems for unified data management.
◦ Handle large-scale transactions with performance optimization.
• Reporting:
◦ Generate JSON-based reports for analytics and dashboards.
◦ Export data in CSV/XML formats for external use.
Visual: Case study examples or screenshots of a dashboard using Multilink data.

Slide 11: Best Practices
• Security:
◦ Always use parameterized queries to prevent SQL injection.
◦ Enable SSL for secure connections.
• Performance:
◦ Use batch operations for multiple inserts/updates.
◦ Leverage SQL_QUERY_SEQ for large datasets to reduce memory usage.
• Connection Management:
◦ Always close connections with END_CONNECT to prevent database locks.
◦ Implement proper transaction handling to ensure data integrity.
• Error Handling:
◦ Check MSG property for detailed error messages.
◦ Use try-catch blocks in C# or conditional checks in WLanguage.
Visual: Checklist of best practices with icons.

Slide 12: Resources and Support
• Official Website: https://multilinkdb.com.br
• Download: Multilink Driver
• Manual: PC SOFT Forum
• Community Support:
◦ Engage with the PC SOFT community for tips and troubleshooting.
◦ Contact Adriano José Boller (adrianoboller@gmail.com, +55 (41) 99949-1800) for official support.
Visual: Screenshots of the website and forum, plus contact details.

Slide 13: Conclusion
• Why Choose Multilink?
◦ Simplifies multi-database integration with a unified, secure, and efficient API.
◦ Supports a wide range of databases and development environments.
◦ Ideal for businesses seeking scalability and developers needing flexibility.
• Next Steps:
◦ Download and try Multilink for your next project.
◦ Explore the manual and community resources for advanced use cases.
◦ Contact WX Soluções for tailored support.
Visual: Call-to-action graphic with a “Get Started” button linking to the download page.

Slide 14: Q&A
• Open floor for questions.
• Provide live demo if feasible (e.g., running one of the code examples).

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
4.520 mensagems
Publicado em junho, 19 2025 - 3:08 PM
Good Morning

Guide to Creating a PowerPoint Presentation for Multilink Database
General Setup
• Template: Use a professional PowerPoint template with a clean design (e.g., blue and white color scheme to reflect technology).
• Fonts: Use sans-serif fonts like Calibri or Arial for readability (Title: 36pt, Body: 20-24pt).
• Transitions: Apply subtle transitions (e.g., Fade) between slides for a polished look.
• Slide Size: Standard 16:9 for modern displays.
• File Name: Save as Multilink_Database_Presentation.pptx.
Slide-by-Slide Breakdown
Slide 1: Title Slide - Introduction to Multilink Database
• Layout: Title and Subtitle
• Content:
◦ Title: Multilink Database: Streamlining Data Integration
◦ Subtitle: A Powerful Solution by WX Soluções
◦ Additional Text: Presented by [Your Name], [Date]
◦ Visual: Include the Multilink Database logo (if available) or a stock image of interconnected databases (e.g., a network of nodes).
• Design:
◦ Background: Gradient blue (dark to light).
◦ Place logo/image in the center or top-right corner.
◦ Use bold text for the title and a smaller font for the subtitle.
Slide 2: Key Features
• Layout: Two-Column or Bullet List
• Content:
◦ Title: Key Features of Multilink Database
◦ Left Column:
▪ Multi-Database Support: MS SQL Server, Oracle, PostgreSQL, MySQL, Redis, etc.
▪ Native Connections: Secure SSL support.
▪ JSON Serialization: Simplifies data handling.
◦ Right Column:
▪ Transaction Management: BEGIN, COMMIT, ROLLBACK.
▪ Email Notifications: Text/HTML with attachments.
▪ Platform Integration: Firebase, Elasticsearch, Redis.
◦ Footer: “More databases coming soon!”
• Design:
◦ Use icons next to each bullet point (e.g., database icon, lock for security, email envelope).
◦ Background: White with a subtle grid pattern.
◦ Add a small screenshot of a database connection interface (if available).
Slide 3: Benefits for Users
• Layout: Three-Column
• Content:
◦ Title: Why Choose Multilink?
◦ Column 1 - Developers:
▪ Unified API for easy connectivity.
▪ Supports C# and WLanguage.
▪ Reduces development time.
◦ Column 2 - Businesses:
▪ Scalable for large datasets.
▪ Secure data handling.
▪ ERP/CRM integration.
◦ Column 3 - Ease of Use:
▪ Intuitive interface.
▪ Comprehensive documentation.
▪ Community support.
• Design:
◦ Use a comparison table or infographic style.
◦ Add a stock image of a happy developer or business team.
◦ Color-code each column (e.g., blue, green, gray).
Slide 4: Getting Started with Multilink
• Layout: Title and Content
• Content:
◦ Title: Getting Started with Multilink
◦ Bullet Points:
▪ Download: Link to repository.windev.com.
▪ Manual: PC SOFT Forum.
▪ Dependencies: Oracle.ManagedDataAccess.dll, Newtonsoft.Json.dll.
▪ Setup: Configure server, user, password, database.
◦ Call to Action: “Start integrating your databases today!”
• Design:
◦ Include a screenshot of the download page or manual.
◦ Use a flowchart showing setup steps (Download → Install → Configure).
◦ Background: Light blue with a tech-themed border.
Slide 5: Example 1 - Connecting to MS SQL Server
• Layout: Two-Column (Code and Explanation)
• Content:
◦ Title: Example 1: MS SQL Server Connection
◦ Left Column (Code):
▪ C# snippet (from presentation outline, Slide 5):
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT()) {
▪ MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Clientes WHERE ClienteID = @ClienteID");
▪ MSSQL_CLIENT.SET("ClienteID", 1001);
▪ Console.WriteLine(MSSQL_CLIENT.DATA);
▪ MSSQL_CLIENT.END_CONNECT();
▪ }

◦ Right Column (Explanation):
▪ Configures a secure MS SQL Server connection.
▪ Executes a parameterized SELECT query.
▪ Returns results in JSON format.
• Design:
◦ Use a code editor-style background for the code section (e.g., dark gray with syntax highlighting).
◦ Add a small diagram of the connection flow (Client → Server → JSON Output).
◦ Highlight key lines in the code (e.g., CONFIGURE, SQL_QUERY).
Slide 6: Example 2 - Transaction Management with PostgreSQL
• Layout: Two-Column
• Content:
◦ Title: Example 2: PostgreSQL Transaction
◦ Left Column (Code):
▪ WLanguage snippet (from Slide 6):
POSTGRESQL_CLIENT.CONFIGURE("localhost", 15432, "postgres", "123456", "postgres", "public")
▪ IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN
▪ IF POSTGRESQL_CLIENT.BEGIN_TRANSACTION() THEN
▪ POSTGRESQL_CLIENT.SET("@nome", "John Doe")
▪ POSTGRESQL_CLIENT.SET("@email", "john@example.com")
▪ atualizado is boolean = POSTGRESQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Email) VALUES (@nome, @email)")
▪ IF atualizado THEN
▪ POSTGRESQL_CLIENT.COMMIT_TRANSACTION(True)
▪ Info("Insert successful!")
▪ ELSE
▪ POSTGRESQL_CLIENT.ROLLBACK_TRANSACTION()
▪ Info(POSTGRESQL_CLIENT.MSG)
▪ END
▪ END
▪ POSTGRESQL_CLIENT.END_CONNECT()
▪ END

◦ Right Column (Explanation):
▪ Connects to PostgreSQL and starts a transaction.
▪ Inserts a client record with parameterized query.
▪ Commits or rolls back based on success.
• Design:
◦ Use a flowchart showing transaction steps (BEGIN → EXEC → COMMIT/ROLLBACK).
◦ Apply a PostgreSQL logo or icon.
◦ Use a light background with a subtle database table graphic.
Slide 7: Example 3 - Email Notifications
• Layout: Two-Column
• Content:
◦ Title: Example 3: Email Notifications
◦ Left Column (Code):
▪ C# snippet (from Slide 7):
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT()) {
▪ MSSQL_CLIENT.SET("Status", "Shipped");
▪ MSSQL_CLIENT.SET("PedidoID", 1000);
▪ MSSQL_CLIENT.SQL_EXEC("UPDATE Pedidos SET Status = @Status WHERE PedidoID = @PedidoID");
▪ EMAIL_CLIENT.CONFIGURE("smtp.server.com", 587, true, "user@server.com", "password");
▪ EMAIL_CLIENT.TEXT_EMAIL("cliente@exemplo.com", "Order Shipped", "Your order has been shipped.");
▪ MSSQL_CLIENT.END_CONNECT();
▪ }

◦ Right Column (Explanation):
▪ Updates order status in the database.
▪ Sends a text-based email notification.
▪ Combines database and email functionality.
• Design:
◦ Include an email icon or a mockup of an email interface.
◦ Show a diagram of the process (Database Update → Email Sent).
◦ Use a clean white background with blue accents.
Slide 8: Example 4 - Oracle Database Connection
• Layout: Two-Column
• Content:
◦ Title: Example 4: Oracle Connection
◦ Left Column (Code):
▪ WLanguage snippet (from Slide 8):
ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword")
▪ IF ORACLE_CLIENT:BEGIN_CONNECT() THEN
▪ Info("Connected to Oracle database!")
▪ ORACLE_CLIENT:SQL_QUERY("SELECT * FROM Employees WHERE DepartmentID = :deptID")
▪ ORACLE_CLIENT:SET_PARAM("deptID", "10")
▪ Info(ORACLE_CLIENT.DATA)
▪ ORACLE_CLIENT:END_CONNECT()
▪ ELSE
▪ Info(ORACLE_CLIENT.MSG)
▪ END

◦ Right Column (Explanation):
▪ Connects to Oracle using SID.
▪ Executes a parameterized query.
▪ Returns JSON results.
• Design:
◦ Add the Oracle logo or a database server graphic.
◦ Include a connection flow diagram (Client → Oracle → JSON).
◦ Use a dark blue background with white text for contrast.
Slide 9: Example 5 - Complex Transaction with Multiple Tables
• Layout: Two-Column
• Content:
◦ Title: Example 5: Complex Transaction
◦ Left Column (Code):
▪ C# snippet (from Slide 9, abbreviated for space):
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT() && MSSQL_CLIENT.BEGIN_TRANSACTION()) {
▪ MSSQL_CLIENT.SET("Nome", "Cliente Exemplo");
▪ MSSQL_CLIENT.SET("Endereco", "Rua Exemplo, 123");
▪ MSSQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Endereco) VALUES (@Nome, @Endereco)");
▪ MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS ClienteID");
▪ int clienteID = Convert.ToInt32(MSSQL_CLIENT.DATA);
▪ // Additional inserts for Pedidos, Itens, Impostos
▪ MSSQL_CLIENT.COMMIT_TRANSACTION();
▪ }

◦ Right Column (Explanation):
▪ Inserts data into multiple tables (Clientes, Pedidos, Itens, Impostos).
▪ Uses transactions for data consistency.
▪ Batch inserts for efficiency.
• Design:
◦ Include an ER diagram of the tables (Clientes, Pedidos, etc.).
◦ Use a transaction flowchart.
◦ Light gray background with blue highlights.
Slide 10: Real-World Applications
• Layout: Bullet List
• Content:
◦ Title: Real-World Applications
◦ Bullet Points:
▪ E-Commerce: Manage orders, inventory, and customer data.
▪ Enterprise Systems: Integrate with ERP/CRM platforms.
▪ Reporting: Generate JSON-based reports and dashboards.
◦ Call to Action: “Transform your data management today!”
• Design:
◦ Use stock images of e-commerce, ERP dashboards, and analytics.
◦ Apply a split background (e.g., half blue, half white).
◦ Add a small case study graphic (e.g., “Success Story: Retail”).
Slide 11: Best Practices
• Layout: Bullet List
• Content:
◦ Title: Best Practices for Multilink
◦ Bullet Points:
▪ Security: Use parameterized queries, enable SSL.
▪ Performance: Batch operations, use SQL_QUERY_SEQ.
▪ Connection: Always close with END_CONNECT.
▪ Error Handling: Check MSG property, use try-catch.
• Design:
◦ Use a checklist format with checkmark icons.
◦ Include a small warning icon for security tips.
◦ White background with green checkmarks.
Slide 12: Resources and Support
• Layout: Title and Content
• Content:
◦ Title: Resources and Support
◦ Bullet Points:
▪ Website: multilinkdb.com.br
▪ Download: repository.windev.com
▪ Manual: PC SOFT Forum
▪ Contact: Adriano José Boller (+55 (41) 99949-1800, adrianoboller@gmail.com)
◦ Call to Action: “Join the Multilink community!”
• Design:
◦ Include screenshots of the website and forum.
◦ Add a QR code linking to the download page.
◦ Blue background with white text.
Slide 13: Conclusion
• Layout: Title and Content
• Content:
◦ Title: Conclusion
◦ Bullet Points:
▪ Simplifies multi-database integration.
▪ Scalable, secure, and developer-friendly.
▪ Start using Multilink today!
◦ Call to Action: “Download now and explore the possibilities!”
• Design:
◦ Use a bold “Get Started” button graphic.
◦ Include a stock image of a futuristic database network.
◦ Gradient blue background.
Slide 14: Q&A
• Layout: Title Only
• Content:
◦ Title: Questions & Answers
◦ Text: “Ask Away! Live demo available.”
• Design:
◦ Simple design with a question mark icon.
◦ Dark blue background with white text.
◦ Optional: Add a placeholder for live demo screenshots.

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
4.520 mensagems
Publicado em junho, 19 2025 - 3:13 PM
Below is a detailed guide to create a PowerPoint presentation (.pptx) for showcasing the Multilink Database based on the provided outline. Since I cannot directly generate or attach a .pptx file, I’ll provide a structured description of each slide, including content, layout suggestions, and visual elements. You can use this guide to create the presentation in Microsoft PowerPoint or a compatible tool. If you prefer, I can also generate specific images for the slides upon your confirmation, as per the guidelines.

Guide to Creating a PowerPoint Presentation for Multilink Database
General Setup
• Template: Use a professional PowerPoint template with a clean design (e.g., blue and white color scheme to reflect technology).
• Fonts: Use sans-serif fonts like Calibri or Arial for readability (Title: 36pt, Body: 20-24pt).
• Transitions: Apply subtle transitions (e.g., Fade) between slides for a polished look.
• Slide Size: Standard 16:9 for modern displays.
• File Name: Save as Multilink_Database_Presentation.pptx.
Slide-by-Slide Breakdown
Slide 1: Title Slide - Introduction to Multilink Database
• Layout: Title and Subtitle
• Content:
◦ Title: Multilink Database: Streamlining Data Integration
◦ Subtitle: A Powerful Solution by WX Soluções
◦ Additional Text: Presented by [Your Name], [Date]
◦ Visual: Include the Multilink Database logo (if available) or a stock image of interconnected databases (e.g., a network of nodes).
• Design:
◦ Background: Gradient blue (dark to light).
◦ Place logo/image in the center or top-right corner.
◦ Use bold text for the title and a smaller font for the subtitle.
Slide 2: Key Features
• Layout: Two-Column or Bullet List
• Content:
◦ Title: Key Features of Multilink Database
◦ Left Column:
▪ Multi-Database Support: MS SQL Server, Oracle, PostgreSQL, MySQL, Redis, etc.
▪ Native Connections: Secure SSL support.
▪ JSON Serialization: Simplifies data handling.
◦ Right Column:
▪ Transaction Management: BEGIN, COMMIT, ROLLBACK.
▪ Email Notifications: Text/HTML with attachments.
▪ Platform Integration: Firebase, Elasticsearch, Redis.
◦ Footer: “More databases coming soon!”
• Design:
◦ Use icons next to each bullet point (e.g., database icon, lock for security, email envelope).
◦ Background: White with a subtle grid pattern.
◦ Add a small screenshot of a database connection interface (if available).
Slide 3: Benefits for Users
• Layout: Three-Column
• Content:
◦ Title: Why Choose Multilink?
◦ Column 1 - Developers:
▪ Unified API for easy connectivity.
▪ Supports C# and WLanguage.
▪ Reduces development time.
◦ Column 2 - Businesses:
▪ Scalable for large datasets.
▪ Secure data handling.
▪ ERP/CRM integration.
◦ Column 3 - Ease of Use:
▪ Intuitive interface.
▪ Comprehensive documentation.
▪ Community support.
• Design:
◦ Use a comparison table or infographic style.
◦ Add a stock image of a happy developer or business team.
◦ Color-code each column (e.g., blue, green, gray).
Slide 4: Getting Started with Multilink
• Layout: Title and Content
• Content:
◦ Title: Getting Started with Multilink
◦ Bullet Points:
▪ Download: Link to repository.windev.com.
▪ Manual: PC SOFT Forum.
▪ Dependencies: Oracle.ManagedDataAccess.dll, Newtonsoft.Json.dll.
▪ Setup: Configure server, user, password, database.
◦ Call to Action: “Start integrating your databases today!”
• Design:
◦ Include a screenshot of the download page or manual.
◦ Use a flowchart showing setup steps (Download → Install → Configure).
◦ Background: Light blue with a tech-themed border.
Slide 5: Example 1 - Connecting to MS SQL Server
• Layout: Two-Column (Code and Explanation)
• Content:
◦ Title: Example 1: MS SQL Server Connection
◦ Left Column (Code):
▪ C# snippet (from presentation outline, Slide 5):
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT()) {
▪ MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Clientes WHERE ClienteID = @ClienteID");
▪ MSSQL_CLIENT.SET("ClienteID", 1001);
▪ Console.WriteLine(MSSQL_CLIENT.DATA);
▪ MSSQL_CLIENT.END_CONNECT();
▪ }

◦ Right Column (Explanation):
▪ Configures a secure MS SQL Server connection.
▪ Executes a parameterized SELECT query.
▪ Returns results in JSON format.
• Design:
◦ Use a code editor-style background for the code section (e.g., dark gray with syntax highlighting).
◦ Add a small diagram of the connection flow (Client → Server → JSON Output).
◦ Highlight key lines in the code (e.g., CONFIGURE, SQL_QUERY).
Slide 6: Example 2 - Transaction Management with PostgreSQL
• Layout: Two-Column
• Content:
◦ Title: Example 2: PostgreSQL Transaction
◦ Left Column (Code):
▪ WLanguage snippet (from Slide 6):
POSTGRESQL_CLIENT.CONFIGURE("localhost", 15432, "postgres", "123456", "postgres", "public")
▪ IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN
▪ IF POSTGRESQL_CLIENT.BEGIN_TRANSACTION() THEN
▪ POSTGRESQL_CLIENT.SET("@nome", "John Doe")
▪ POSTGRESQL_CLIENT.SET("@email", "john@example.com")
▪ atualizado is boolean = POSTGRESQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Email) VALUES (@nome, @email)")
▪ IF atualizado THEN
▪ POSTGRESQL_CLIENT.COMMIT_TRANSACTION(True)
▪ Info("Insert successful!")
▪ ELSE
▪ POSTGRESQL_CLIENT.ROLLBACK_TRANSACTION()
▪ Info(POSTGRESQL_CLIENT.MSG)
▪ END
▪ END
▪ POSTGRESQL_CLIENT.END_CONNECT()
▪ END

◦ Right Column (Explanation):
▪ Connects to PostgreSQL and starts a transaction.
▪ Inserts a client record with parameterized query.
▪ Commits or rolls back based on success.
• Design:
◦ Use a flowchart showing transaction steps (BEGIN → EXEC → COMMIT/ROLLBACK).
◦ Apply a PostgreSQL logo or icon.
◦ Use a light background with a subtle database table graphic.
Slide 7: Example 3 - Email Notifications
• Layout: Two-Column
• Content:
◦ Title: Example 3: Email Notifications
◦ Left Column (Code):
▪ C# snippet (from Slide 7):
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT()) {
▪ MSSQL_CLIENT.SET("Status", "Shipped");
▪ MSSQL_CLIENT.SET("PedidoID", 1000);
▪ MSSQL_CLIENT.SQL_EXEC("UPDATE Pedidos SET Status = @Status WHERE PedidoID = @PedidoID");
▪ EMAIL_CLIENT.CONFIGURE("smtp.server.com", 587, true, "user@server.com", "password");
▪ EMAIL_CLIENT.TEXT_EMAIL("cliente@exemplo.com", "Order Shipped", "Your order has been shipped.");
▪ MSSQL_CLIENT.END_CONNECT();
▪ }

◦ Right Column (Explanation):
▪ Updates order status in the database.
▪ Sends a text-based email notification.
▪ Combines database and email functionality.
• Design:
◦ Include an email icon or a mockup of an email interface.
◦ Show a diagram of the process (Database Update → Email Sent).
◦ Use a clean white background with blue accents.
Slide 8: Example 4 - Oracle Database Connection
• Layout: Two-Column
• Content:
◦ Title: Example 4: Oracle Connection
◦ Left Column (Code):
▪ WLanguage snippet (from Slide 8):
ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword")
▪ IF ORACLE_CLIENT:BEGIN_CONNECT() THEN
▪ Info("Connected to Oracle database!")
▪ ORACLE_CLIENT:SQL_QUERY("SELECT * FROM Employees WHERE DepartmentID = :deptID")
▪ ORACLE_CLIENT:SET_PARAM("deptID", "10")
▪ Info(ORACLE_CLIENT.DATA)
▪ ORACLE_CLIENT:END_CONNECT()
▪ ELSE
▪ Info(ORACLE_CLIENT.MSG)
▪ END

◦ Right Column (Explanation):
▪ Connects to Oracle using SID.
▪ Executes a parameterized query.
▪ Returns JSON results.
• Design:
◦ Add the Oracle logo or a database server graphic.
◦ Include a connection flow diagram (Client → Oracle → JSON).
◦ Use a dark blue background with white text for contrast.
Slide 9: Example 5 - Complex Transaction with Multiple Tables
• Layout: Two-Column
• Content:
◦ Title: Example 5: Complex Transaction
◦ Left Column (Code):
▪ C# snippet (from Slide 9, abbreviated for space):
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT() && MSSQL_CLIENT.BEGIN_TRANSACTION()) {
▪ MSSQL_CLIENT.SET("Nome", "Cliente Exemplo");
▪ MSSQL_CLIENT.SET("Endereco", "Rua Exemplo, 123");
▪ MSSQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Endereco) VALUES (@Nome, @Endereco)");
▪ MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS ClienteID");
▪ int clienteID = Convert.ToInt32(MSSQL_CLIENT.DATA);
▪ // Additional inserts for Pedidos, Itens, Impostos
▪ MSSQL_CLIENT.COMMIT_TRANSACTION();
▪ }

◦ Right Column (Explanation):
▪ Inserts data into multiple tables (Clientes, Pedidos, Itens, Impostos).
▪ Uses transactions for data consistency.
▪ Batch inserts for efficiency.
• Design:
◦ Include an ER diagram of the tables (Clientes, Pedidos, etc.).
◦ Use a transaction flowchart.
◦ Light gray background with blue highlights.
Slide 10: Real-World Applications
• Layout: Bullet List
• Content:
◦ Title: Real-World Applications
◦ Bullet Points:
▪ E-Commerce: Manage orders, inventory, and customer data.
▪ Enterprise Systems: Integrate with ERP/CRM platforms.
▪ Reporting: Generate JSON-based reports and dashboards.
◦ Call to Action: “Transform your data management today!”
• Design:
◦ Use stock images of e-commerce, ERP dashboards, and analytics.
◦ Apply a split background (e.g., half blue, half white).
◦ Add a small case study graphic (e.g., “Success Story: Retail”).
Slide 11: Best Practices
• Layout: Bullet List
• Content:
◦ Title: Best Practices for Multilink
◦ Bullet Points:
▪ Security: Use parameterized queries, enable SSL.
▪ Performance: Batch operations, use SQL_QUERY_SEQ.
▪ Connection: Always close with END_CONNECT.
▪ Error Handling: Check MSG property, use try-catch.
• Design:
◦ Use a checklist format with checkmark icons.
◦ Include a small warning icon for security tips.
◦ White background with green checkmarks.
Slide 12: Resources and Support
• Layout: Title and Content
• Content:
◦ Title: Resources and Support
◦ Bullet Points:
▪ Website: multilinkdb.com.br
▪ Download: repository.windev.com
▪ Manual: PC SOFT Forum
▪ Contact: Adriano José Boller (+55 (41) 99949-1800, adrianoboller@gmail.com)
◦ Call to Action: “Join the Multilink community!”
• Design:
◦ Include screenshots of the website and forum.
◦ Add a QR code linking to the download page.
◦ Blue background with white text.
Slide 13: Conclusion
• Layout: Title and Content
• Content:
◦ Title: Conclusion
◦ Bullet Points:
▪ Simplifies multi-database integration.
▪ Scalable, secure, and developer-friendly.
▪ Start using Multilink today!
◦ Call to Action: “Download now and explore the possibilities!”
• Design:
◦ Use a bold “Get Started” button graphic.
◦ Include a stock image of a futuristic database network.
◦ Gradient blue background.
Slide 14: Q&A
• Layout: Title Only
• Content:
◦ Title: Questions & Answers
◦ Text: “Ask Away! Live demo available.”
• Design:
◦ Simple design with a question mark icon.
◦ Dark blue background with white text.
◦ Optional: Add a placeholder for live demo screenshots.

Steps to Create the Presentation in PowerPoint
1 Open PowerPoint:
◦ Create a new presentation and select a professional template.
◦ Set slide size to 16:9.
2 Add Slides:
◦ Insert 14 slides based on the layouts described above.
◦ Use the “Title and Content”, “Two Content”, or “Title Only” layouts as specified.
3 Insert Content:
◦ Copy and paste the text from each slide’s content section.
◦ Format code snippets using a monospaced font (e.g., Consolas) with syntax highlighting if possible (manual formatting or paste from a code editor).
4 Add Visuals:
◦ Download stock images (e.g., from Unsplash or Pexels) for databases, networks, and tech themes.
◦ Insert icons from PowerPoint’s built-in library or external sources (e.g., Flaticon).
◦ Create diagrams (e.g., flowcharts, ER diagrams) using PowerPoint’s SmartArt or Shapes tools.
5 Format Design:
◦ Apply consistent colors (e.g., blue: #005566, white: #FFFFFF, gray: #D3D3D3).
◦ Ensure text is readable (contrast with background).
◦ Add subtle animations (e.g., Appear) for bullet points or code lines.
6 Insert Hyperlinks:
◦ Link URLs to the respective text (e.g., website, download, manual).
◦ Test hyperlinks in Slide Show mode.
7 Save and Export:
◦ Save as Multilink_Database_Presentation.pptx.
◦ Optionally export as PDF for sharing.

Optional: Generating Images
If you’d like me to generate specific images for the slides (e.g., a database network diagram, ER diagram, or mockup of an email interface), please confirm, and I’ll provide them as separate artifacts. For example:
• ER Diagram: Tables for Clientes, Pedidos, Pedidos_Itens, Impostos.
• Flowchart: Transaction process (BEGIN → EXEC → COMMIT/ROLLBACK).
• Mockup: Email notification interface.
Notes
• Time to Create: Expect 1-2 hours to build the presentation, depending on familiarity with PowerPoint.
• Customization: Adjust slide content or design based on your audience (e.g., more technical for developers, more business-focused for managers).
• Demo Preparation: If including a live demo, set up a local database (e.g., PostgreSQL) and test the code snippets beforehand.
Let me know if you need assistance with specific PowerPoint features, additional content, or image generation to enhance the presentation!

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Membro registado
4.520 mensagems
Publicado em junho, 19 2025 - 3:14 PM
Below is a detailed guide to create a PowerPoint presentation (.pptx) for showcasing the Multilink Database based on the provided outline. Since I cannot directly generate or attach a .pptx file, I’ll provide a structured description of each slide, including content, layout suggestions, and visual elements. You can use this guide to create the presentation in Microsoft PowerPoint or a compatible tool. If you prefer, I can also generate specific images for the slides upon your confirmation, as per the guidelines.

Guide to Creating a PowerPoint Presentation for Multilink Database
General Setup
• Template: Use a professional PowerPoint template with a clean design (e.g., blue and white color scheme to reflect technology).
• Fonts: Use sans-serif fonts like Calibri or Arial for readability (Title: 36pt, Body: 20-24pt).
• Transitions: Apply subtle transitions (e.g., Fade) between slides for a polished look.
• Slide Size: Standard 16:9 for modern displays.
• File Name: Save as Multilink_Database_Presentation.pptx.
Slide-by-Slide Breakdown
Slide 1: Title Slide - Introduction to Multilink Database
• Layout: Title and Subtitle
• Content:
◦ Title: Multilink Database: Streamlining Data Integration
◦ Subtitle: A Powerful Solution by WX Soluções
◦ Additional Text: Presented by [Your Name], [Date]
◦ Visual: Include the Multilink Database logo (if available) or a stock image of interconnected databases (e.g., a network of nodes).
• Design:
◦ Background: Gradient blue (dark to light).
◦ Place logo/image in the center or top-right corner.
◦ Use bold text for the title and a smaller font for the subtitle.
Slide 2: Key Features
• Layout: Two-Column or Bullet List
• Content:
◦ Title: Key Features of Multilink Database
◦ Left Column:
▪ Multi-Database Support: MS SQL Server, Oracle, PostgreSQL, MySQL, Redis, etc.
▪ Native Connections: Secure SSL support.
▪ JSON Serialization: Simplifies data handling.
◦ Right Column:
▪ Transaction Management: BEGIN, COMMIT, ROLLBACK.
▪ Email Notifications: Text/HTML with attachments.
▪ Platform Integration: Firebase, Elasticsearch, Redis.
◦ Footer: “More databases coming soon!”
• Design:
◦ Use icons next to each bullet point (e.g., database icon, lock for security, email envelope).
◦ Background: White with a subtle grid pattern.
◦ Add a small screenshot of a database connection interface (if available).
Slide 3: Benefits for Users
• Layout: Three-Column
• Content:
◦ Title: Why Choose Multilink?
◦ Column 1 - Developers:
▪ Unified API for easy connectivity.
▪ Supports C# and WLanguage.
▪ Reduces development time.
◦ Column 2 - Businesses:
▪ Scalable for large datasets.
▪ Secure data handling.
▪ ERP/CRM integration.
◦ Column 3 - Ease of Use:
▪ Intuitive interface.
▪ Comprehensive documentation.
▪ Community support.
• Design:
◦ Use a comparison table or infographic style.
◦ Add a stock image of a happy developer or business team.
◦ Color-code each column (e.g., blue, green, gray).
Slide 4: Getting Started with Multilink
• Layout: Title and Content
• Content:
◦ Title: Getting Started with Multilink
◦ Bullet Points:
▪ Download: Link to repository.windev.com.
▪ Manual: PC SOFT Forum.
▪ Dependencies: Oracle.ManagedDataAccess.dll, Newtonsoft.Json.dll.
▪ Setup: Configure server, user, password, database.
◦ Call to Action: “Start integrating your databases today!”
• Design:
◦ Include a screenshot of the download page or manual.
◦ Use a flowchart showing setup steps (Download → Install → Configure).
◦ Background: Light blue with a tech-themed border.
Slide 5: Example 1 - Connecting to MS SQL Server
• Layout: Two-Column (Code and Explanation)
• Content:
◦ Title: Example 1: MS SQL Server Connection
◦ Left Column (Code):
▪ C# snippet (from presentation outline, Slide 5):
MSSQL_CLIENT.CONFIGURE("server_name", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT()) {
▪ MSSQL_CLIENT.SQL_QUERY("SELECT * FROM Clientes WHERE ClienteID = @ClienteID");
▪ MSSQL_CLIENT.SET("ClienteID", 1001);
▪ Console.WriteLine(MSSQL_CLIENT.DATA);
▪ MSSQL_CLIENT.END_CONNECT();
▪ }

◦ Right Column (Explanation):
▪ Configures a secure MS SQL Server connection.
▪ Executes a parameterized SELECT query.
▪ Returns results in JSON format.
• Design:
◦ Use a code editor-style background for the code section (e.g., dark gray with syntax highlighting).
◦ Add a small diagram of the connection flow (Client → Server → JSON Output).
◦ Highlight key lines in the code (e.g., CONFIGURE, SQL_QUERY).
Slide 6: Example 2 - Transaction Management with PostgreSQL
• Layout: Two-Column
• Content:
◦ Title: Example 2: PostgreSQL Transaction
◦ Left Column (Code):
▪ WLanguage snippet (from Slide 6):
POSTGRESQL_CLIENT.CONFIGURE("localhost", 15432, "postgres", "123456", "postgres", "public")
▪ IF POSTGRESQL_CLIENT.BEGIN_CONNECT() THEN
▪ IF POSTGRESQL_CLIENT.BEGIN_TRANSACTION() THEN
▪ POSTGRESQL_CLIENT.SET("@nome", "John Doe")
▪ POSTGRESQL_CLIENT.SET("@email", "john@example.com")
▪ atualizado is boolean = POSTGRESQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Email) VALUES (@nome, @email)")
▪ IF atualizado THEN
▪ POSTGRESQL_CLIENT.COMMIT_TRANSACTION(True)
▪ Info("Insert successful!")
▪ ELSE
▪ POSTGRESQL_CLIENT.ROLLBACK_TRANSACTION()
▪ Info(POSTGRESQL_CLIENT.MSG)
▪ END
▪ END
▪ POSTGRESQL_CLIENT.END_CONNECT()
▪ END

◦ Right Column (Explanation):
▪ Connects to PostgreSQL and starts a transaction.
▪ Inserts a client record with parameterized query.
▪ Commits or rolls back based on success.
• Design:
◦ Use a flowchart showing transaction steps (BEGIN → EXEC → COMMIT/ROLLBACK).
◦ Apply a PostgreSQL logo or icon.
◦ Use a light background with a subtle database table graphic.
Slide 7: Example 3 - Email Notifications
• Layout: Two-Column
• Content:
◦ Title: Example 3: Email Notifications
◦ Left Column (Code):
▪ C# snippet (from Slide 7):
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT()) {
▪ MSSQL_CLIENT.SET("Status", "Shipped");
▪ MSSQL_CLIENT.SET("PedidoID", 1000);
▪ MSSQL_CLIENT.SQL_EXEC("UPDATE Pedidos SET Status = @Status WHERE PedidoID = @PedidoID");
▪ EMAIL_CLIENT.CONFIGURE("smtp.server.com", 587, true, "user@server.com", "password");
▪ EMAIL_CLIENT.TEXT_EMAIL("cliente@exemplo.com", "Order Shipped", "Your order has been shipped.");
▪ MSSQL_CLIENT.END_CONNECT();
▪ }

◦ Right Column (Explanation):
▪ Updates order status in the database.
▪ Sends a text-based email notification.
▪ Combines database and email functionality.
• Design:
◦ Include an email icon or a mockup of an email interface.
◦ Show a diagram of the process (Database Update → Email Sent).
◦ Use a clean white background with blue accents.
Slide 8: Example 4 - Oracle Database Connection
• Layout: Two-Column
• Content:
◦ Title: Example 4: Oracle Connection
◦ Left Column (Code):
▪ WLanguage snippet (from Slide 8):
ConfigureWithSID("myServer", "1521", "mySID", "myUser", "myPassword")
▪ IF ORACLE_CLIENT:BEGIN_CONNECT() THEN
▪ Info("Connected to Oracle database!")
▪ ORACLE_CLIENT:SQL_QUERY("SELECT * FROM Employees WHERE DepartmentID = :deptID")
▪ ORACLE_CLIENT:SET_PARAM("deptID", "10")
▪ Info(ORACLE_CLIENT.DATA)
▪ ORACLE_CLIENT:END_CONNECT()
▪ ELSE
▪ Info(ORACLE_CLIENT.MSG)
▪ END

◦ Right Column (Explanation):
▪ Connects to Oracle using SID.
▪ Executes a parameterized query.
▪ Returns JSON results.
• Design:
◦ Add the Oracle logo or a database server graphic.
◦ Include a connection flow diagram (Client → Oracle → JSON).
◦ Use a dark blue background with white text for contrast.
Slide 9: Example 5 - Complex Transaction with Multiple Tables
• Layout: Two-Column
• Content:
◦ Title: Example 5: Complex Transaction
◦ Left Column (Code):
▪ C# snippet (from Slide 9, abbreviated for space):
MSSQL_CLIENT.CONFIGURE("server", "user", "password", "database", true, true);
▪ if (MSSQL_CLIENT.BEGIN_CONNECT() && MSSQL_CLIENT.BEGIN_TRANSACTION()) {
▪ MSSQL_CLIENT.SET("Nome", "Cliente Exemplo");
▪ MSSQL_CLIENT.SET("Endereco", "Rua Exemplo, 123");
▪ MSSQL_CLIENT.SQL_EXEC("INSERT INTO Clientes (Nome, Endereco) VALUES (@Nome, @Endereco)");
▪ MSSQL_CLIENT.SQL_QUERY("SELECT SCOPE_IDENTITY() AS ClienteID");
▪ int clienteID = Convert.ToInt32(MSSQL_CLIENT.DATA);
▪ // Additional inserts for Pedidos, Itens, Impostos
▪ MSSQL_CLIENT.COMMIT_TRANSACTION();
▪ }

◦ Right Column (Explanation):
▪ Inserts data into multiple tables (Clientes, Pedidos, Itens, Impostos).
▪ Uses transactions for data consistency.
▪ Batch inserts for efficiency.
• Design:
◦ Include an ER diagram of the tables (Clientes, Pedidos, etc.).
◦ Use a transaction flowchart.
◦ Light gray background with blue highlights.
Slide 10: Real-World Applications
• Layout: Bullet List
• Content:
◦ Title: Real-World Applications
◦ Bullet Points:
▪ E-Commerce: Manage orders, inventory, and customer data.
▪ Enterprise Systems: Integrate with ERP/CRM platforms.
▪ Reporting: Generate JSON-based reports and dashboards.
◦ Call to Action: “Transform your data management today!”
• Design:
◦ Use stock images of e-commerce, ERP dashboards, and analytics.
◦ Apply a split background (e.g., half blue, half white).
◦ Add a small case study graphic (e.g., “Success Story: Retail”).
Slide 11: Best Practices
• Layout: Bullet List
• Content:
◦ Title: Best Practices for Multilink
◦ Bullet Points:
▪ Security: Use parameterized queries, enable SSL.
▪ Performance: Batch operations, use SQL_QUERY_SEQ.
▪ Connection: Always close with END_CONNECT.
▪ Error Handling: Check MSG property, use try-catch.
• Design:
◦ Use a checklist format with checkmark icons.
◦ Include a small warning icon for security tips.
◦ White background with green checkmarks.
Slide 12: Resources and Support
• Layout: Title and Content
• Content:
◦ Title: Resources and Support
◦ Bullet Points:
▪ Website: multilinkdb.com.br
▪ Download: repository.windev.com
▪ Manual: PC SOFT Forum
▪ Contact: Adriano José Boller (+55 (41) 99949-1800, adrianoboller@gmail.com)
◦ Call to Action: “Join the Multilink community!”
• Design:
◦ Include screenshots of the website and forum.
◦ Add a QR code linking to the download page.
◦ Blue background with white text.
Slide 13: Conclusion
• Layout: Title and Content
• Content:
◦ Title: Conclusion
◦ Bullet Points:
▪ Simplifies multi-database integration.
▪ Scalable, secure, and developer-friendly.
▪ Start using Multilink today!
◦ Call to Action: “Download now and explore the possibilities!”
• Design:
◦ Use a bold “Get Started” button graphic.
◦ Include a stock image of a futuristic database network.
◦ Gradient blue background.
Slide 14: Q&A
• Layout: Title Only
• Content:
◦ Title: Questions & Answers
◦ Text: “Ask Away! Live demo available.”
• Design:
◦ Simple design with a question mark icon.
◦ Dark blue background with white text.
◦ Optional: Add a placeholder for live demo screenshots.

Steps to Create the Presentation in PowerPoint
1 Open PowerPoint:
◦ Create a new presentation and select a professional template.
◦ Set slide size to 16:9.
2 Add Slides:
◦ Insert 14 slides based on the layouts described above.
◦ Use the “Title and Content”, “Two Content”, or “Title Only” layouts as specified.
3 Insert Content:
◦ Copy and paste the text from each slide’s content section.
◦ Format code snippets using a monospaced font (e.g., Consolas) with syntax highlighting if possible (manual formatting or paste from a code editor).
4 Add Visuals:
◦ Download stock images (e.g., from Unsplash or Pexels) for databases, networks, and tech themes.
◦ Insert icons from PowerPoint’s built-in library or external sources (e.g., Flaticon).
◦ Create diagrams (e.g., flowcharts, ER diagrams) using PowerPoint’s SmartArt or Shapes tools.
5 Format Design:
◦ Apply consistent colors (e.g., blue: #005566, white: #FFFFFF, gray: #D3D3D3).
◦ Ensure text is readable (contrast with background).
◦ Add subtle animations (e.g., Appear) for bullet points or code lines.
6 Insert Hyperlinks:
◦ Link URLs to the respective text (e.g., website, download, manual).
◦ Test hyperlinks in Slide Show mode.
7 Save and Export:
◦ Save as Multilink_Database_Presentation.pptx.
◦ Optionally export as PDF for sharing.

Optional: Generating Images
If you’d like me to generate specific images for the slides (e.g., a database network diagram, ER diagram, or mockup of an email interface), please confirm, and I’ll provide them as separate artifacts. For example:
• ER Diagram: Tables for Clientes, Pedidos, Pedidos_Itens, Impostos.
• Flowchart: Transaction process (BEGIN → EXEC → COMMIT/ROLLBACK).
• Mockup: Email notification interface.
Notes
• Time to Create: Expect 1-2 hours to build the presentation, depending on familiarity with PowerPoint.
• Customization: Adjust slide content or design based on your audience (e.g., more technical for developers, more business-focused for managers).
• Demo Preparation: If including a live demo, set up a local database (e.g., PostgreSQL) and test the code snippets beforehand.
Let me know if you need assistance with specific PowerPoint features, additional content, or image generation to enhance the presentation!

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