Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Diferenças entre DBC e SQL
Message
 
À
02/09/2005 12:44:49
Peter Wagner
Point Informática Ltda.
Limeira, Brésil
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Divers
Thread ID:
01046086
Message ID:
01047055
Vues:
15
Obrigado pelas respostas... Já estou estudando o SQL aqui!

Estou gostando de algumas coisas, mas ficando um pouco preocupado com outras...

Criei uma tabela chamada Clientes (banco de dados ESTUDO do SQL Server) conforme o script abaixo:
Create Table Clientes
(
Codigo Int Identity Constraint Clientes_Codigo_PK Primary Key,
Cpf Char(14) Constraint Clientes_Cfp_Formato Check (Cpf Like '[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]-[0-9][0-9]') NOT NULL Constraint Clientes_CPF_Unico Unique NonClustered,
Nome Char(50) NOT NULL,
Endereco Char(50),
Ocupacao Char(50) Constraint Clientes_Ocupacao_Default Default 'Consultor Independente'
)
Com esta tabela criada no banco de dados Estudo do SQL Server, vou tentar fazer algumas inclusões no VFP:
nConn = SQLStringConnect("driver={sql server};server=(local);database=estudo")
? SQLExec(nConn,[Insert Into Clientes (Cpf, Nome) Values ('000.000.000-00','Meu Primeiro Cliente')])
? SqlDisconnect(nConn)
Ok - Até aqui tudo perfeito... Inclui meu primeiro cliente. Vamos continuar!
nConn = SQLStringConnect("driver={sql server};server=(local);database=estudo")

? SQLExec(nConn,[Insert Into Clientes (Cpf, Nome) Values ('00.000.000-00','Meu Segundo Cliente')])
* Erro: O Formato do Campo está fora das regras...
? Str(SqlError[1,1])+" - "+SqlError[1,3]
* A mensagem é essa:
*    1526 - [Microsoft][ODBC SQL Server Driver][SQL Server]INSERT statement conflicted with COLUMN CHECK constraint 'Clientes_Cfp_Formato'. The conflict occurred in database 'Estudo', table 'Clientes', column 'Cpf'.

? SQLExec(nConn,[Insert Into Clientes (Cpf, Nome) Values ('000.000.000-00','Meu Segundo Cliente')])
* Erro: O campo CPF foi duplicado!
* A mensagem é essa:
*      1526 - [Microsoft][ODBC SQL Server Driver][SQL Server]Violation of UNIQUE KEY constraint 'Clientes_CPF_Unico'. Cannot insert duplicate key in object 'Clientes'.

? SqlDisconnect(nConn)
Bom, agora o bicho pegou... Eu entendi perfeitamente o que aconteceu, mas o usuário não vai entender isso de jeito nenhum. Preciso de uma mensagem amigável, algo como: Erro 1526 - Formato do CPF inválido! ou então ,Erro 1526 - CPF já cadastrado!

Hoje, usando o DBF com TRIGGER de INSERT e UPDATE, faço algo do tipo:
Function ChecarClientes
   m.MsgErro = Iif(Empty(Nome),'Nome não informado'+Chr(13),'')+;
               Iif(FormatoInvalidoCPF(Cpf),'Formato do CPF inválido'+Chr(13),'')
   Return Empty(m.MsgErro)
EndFunc
Então, a variável m.MsgErro já foi declarada anteriormente e se um trigger falhar, basta pegar a mensagem nesta variável e exibir para o usuário.

Tem jeito de fazer algo parecido com o SQL Server?

PS: O exemplo acima foi referente ao formato do CPF, mas eu teria essa condição por todo o sistema. Além disso, quero usar os relacionamentos entre as tabelas do SQL também: ex: não excluir um produto que tenha vendas, etc etc etc - e neste caso, eu também vou precisar de uma mensagem que o usuário entenda!

Abraços e obrigado pela ajuda!
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Rodolfo Duarte
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform