Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/327912/newLayout.css

...

Pagetitle
TCSQLExec
TCSQLExec

Função: TCSQLExec

Executa

...

uma

...

instrução de

...

sintaxe

...

SQL

...

(Structured

...

Query

...

Language) diretamente no banco de dados em que está conectado.

Sintaxe

Bloco de código
collapsefalse
TCSQLExec( <
cStatement> ) --> nStatus 
 cStatement > )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cStatement

...

caractere

Indica a

...

instrução que será

...

executada no banco de dados.

X

...


Retorno

Nome

...

Tipo

...

Descrição

nStatus

...

numérico

Retorna o status da execução. Se menor que 0 indica que a

...

instrução não foi executada com sucesso.

Observações

...

  • O parâmetro cStatement é extremamente dependente do SGBD (

...

  • Sistema Gerenciador de Banco de Dados) e deve ser construída visando o banco de dados utilizado.

...

  • É aconselhável que o parâmetro

...

  • cStatement execute uma única instrução por vez

...

  • . Isto porque a solicitação de execução de mais de uma instrução no Statement está sujeito ao comportamento do SGBD.
  • Essa função, por submeter instruções SQL diretamente ao SGBD, podendo utilizar tabelas não criadas pelo
    Inclusão de trecho
    DBAccess
    DBAccess
    nopaneltrue
    , não atualiza os campos de controle criados pelo
    Inclusão de trecho
    DBAccess
    DBAccess
    nopaneltrue
    .

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
USER FUNCTION TEST()
  TCLink()
  
  TCDelFile("T1")
  
  DBCreate("T1", {{"FIELD_NAME", "C", 10, 0}, ;
        
(Sistema Gerenciador de Banco de Dados), como por exemplo:
  • No MSSQL Server cada instrução deve ser separada pelo caracter ';' (ponto e vírgula). Se for executada uma única instrução o caracter ';' (ponto e vírgula) é opcional.
  • No DB2 (IBM) sempre é executada uma única instrução e sempre a primeira. Se for colocada mais de uma instrução separada pelo caracter ';' (ponto e vírgula) somente a primeira instrução será executada e não é reportado nenhuma mensagem sobre as demais instruções que não foram executadas.
  • No Oracle o Statement não pode ser encerrado com o caracter ';' (ponto e vírgula), isto é interpretado pelo SGBD como caracter inválido. Caso seja necessário executar mais de uma instrução no mesmo Statement, é obrigatório a utilização da estrutura 'BEGIN ... END;' ('BEGIN <INSTRUÇÃO 1>;<INSTRUÇÃO 2>;<...>;<INSTRUÇÃO N>; END;') com as instruções separadas pelo caracter ';' (ponto e vírgula).
#DEFINE CRLF Chr(13)+Chr(10)
User Function Exemplo()
Local cEstrutura := "", cStatement := ""
If !(TCIsConnected())
Return MsgAlert("Você precisa abrir uma conexão com o banco de dados")
EndIf
If !("MSSQL"$TCGetDB())
Return MsgStop(TCGetDB() + " - Nao tratado!")
Endif
cEstrutura := "MyTempTable"
cStatement := "if exists(select name from sysobjects where name like '" + cEstrutura + "%' and xtype = 'U')" + CRLF
cStatement += "begin" + CRLF
cStatement += " drop table " + cEstrutura + "" + CRLF
cStatement += "end" + CRLF
If (TCSQLExec(cStatement) < 0)
Return MsgStop("TCSQLError() " + TCSQLError())
EndIf
cStatement := "create table " + cEstrutura + " (" + CRLF
cStatement += " campo_caractere varchar(20) not null default ' ', " + CRLF
cStatement += " campo_numerico float default 0, " + CRLF
cStatement += " campo_logico varchar(1) not null default 'F', " + CRLF
cStatement += " campo_data varchar(8) not null default ' ' " + CRLF
cStatement += ")"
If (TCSQLExec(cStatement) < 0)
Return MsgStop("TCSQLError() " + TCSQLError())
EndIf
cStatement := "insert into " + cEstrutura + " values ('1st
          
', 1, 'T', '20080101')"
If (TCSQLExec(cStatement) < 0)
Return MsgStop("TCSQLError() " + TCSQLError())
EndIf
cStatement := "insert into " + cEstrutura + " values ('3nd ', 2, 'F', '20080103')"
If (TCSQLExec(cStatement) < 0)
Return MsgStop("TCSQLError() " + TCSQLError())
EndIf
cStatement := "insert into " + cEstrutura + " values ('3rd ', 3, 'T', '20080103')"
If (TCSQLExec(cStatement) < 0)
Return MsgStop("TCSQLError() " + TCSQLError())
EndIf
cStatement := "insert into " + cEstrutura + " values ('4th ', 4, 'F', '20080104')"
If (TCSQLExec(cStatement) < 0)
Return MsgStop("TCSQLError() " + TCSQLError())
EndIf
cStatement := "update " + cEstrutura + " " + CRLF
cStatement += " set campo_caractere = '2nd ', campo_data = '20080102'" + CRLF
cStatement += "where campo_caractere = '3nd ' and campo_data = '20080103'"
If (TCSQLExec(cStatement) < 0)
Return MsgStop
{"FIELD_TYPE", "C", 10, 0}}, "TOPCONN")
  
  nStatus := TCSqlExec("insert into t1 (field_name, field_type) values ('name', 'type')")
  
  if (nStatus < 0)
    conout("TCSQLError() " + TCSQLError())

EndIf
cStatement := "delete " + cEstrutura + " where campo_caractere = '4th '"
If (TCSQLExec(cStatement) < 0)
Return MsgStop("TCSQLError() " + TCSQLError())
EndIf
Return
Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server
 

  endif
  
  TCUnlink()
RETURN

Veja também