Fórum Missing Connection or Connection String #407567
12/09/2011
0
Bom Dia,
Estou com um pequeno (e chato) problema em meu projeto de sistema...
Estou criando um sistema para agendamento de fisioterapia, mas o Form de pacientes está retornando um erro logo após o primeiro cadastro.
1. Se a tabela TBPACIENTES do banco de dados estiver VAZIA o form de cadastro para novos pacientes abre normalmente e funciona 100%, mas se tiver ao menos 1 cadastro ao tentar abrir o form o erro: MISSING CONNECTION OR CONNECTION STRING é retornado.
2. Da primeira vez que isso ocorreu eu verifiquei todo o código e corrigi algumas falhas e o programa funcionou 100%, mas logo após ligar o computador e testar o programa novamente o problema voltou.
3. Sou iniciante em DELPHI e não sei debugar.
Segue o código do form:
unit UPacientes;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, DB, ADODB, ExtCtrls, Buttons;
type
TfrmPacientes = class(TForm)
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Label5: TLabel;
Label6: TLabel;
DBEdit6: TDBEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
DBEdit10: TDBEdit;
Label11: TLabel;
DBEdit11: TDBEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Button1: TButton;
Button2: TButton;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
qryAux: TADOQuery;
qryAux2: TADOQuery;
edtEndereco: TEdit;
edtBairro: TEdit;
edtCidade: TEdit;
edtEstado: TEdit;
dbedtCidade: TDBEdit;
dbedtBairro: TDBEdit;
dbedtEstado: TDBEdit;
dbedtCodigo: TDBEdit;
dbnPacientes: TDBNavigator;
dbedtEndereco: TDBEdit;
BitBtn1: TBitBtn;
dsQry: TADODataSet;
Label1: TLabel;
Label15: TLabel;
DBEdit5: TDBEdit;
dbedtSexo: TDBEdit;
Label16: TLabel;
DBEdit7: TDBEdit;
DBLookupComboBox3: TDBLookupComboBox;
DBLookupComboBox4: TDBLookupComboBox;
DBLookupComboBox5: TDBLookupComboBox;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Ramal: TLabel;
DBEdit8: TDBEdit;
Label20: TLabel;
DBEdit9: TDBEdit;
dbrgConv: TDBRadioGroup;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label21: TLabel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label38: TLabel;
Label39: TLabel;
Label40: TLabel;
Label41: TLabel;
Label42: TLabel;
RadioButton3: TRadioButton;
RadioButton1: TRadioButton;
DBEdit12: TDBEdit;
procedure RadioButton1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DBEdit6KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit11KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit3Change(Sender: TObject);
procedure DBEdit3KeyPress(Sender: TObject; var Key: Char);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
procedure DBEdit2KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit2Change(Sender: TObject);
procedure DBEdit4Change(Sender: TObject);
procedure DBEdit6Change(Sender: TObject);
procedure DBEdit11Change(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure dbrgConvChange(Sender: TObject);
procedure DBEdit8Change(Sender: TObject);
procedure FormShow(Sender: TObject);
private
//Função para a máscara dos edits
function MASCARA(edt: String;str:String):string;
//Função para verificar se o CEP existe no banco de dados
function VERIFICA(const CEP_CHECK: String): Boolean;
//Função para buscar o CEP no banco de dados
function VERCEP(const VER_CEP: String): Boolean;
public
{ Public declarations }
end;
var
frmPacientes: TfrmPacientes;
implementation
uses UDMPrincipal, URuaVarios;
{$R *.dfm}
//Quando clicar no botão "?" do CEP ele irá executar o código abaixo
procedure TfrmPacientes.BitBtn1Click(Sender: TObject);
var
endereco, bairro, cidade, estado: integer;
CEP: string;
begin
//Uma caixa de diálogo aparecerá perguntando o nome da rua
inputquery('Consultar CEP', 'Digite o nome da rua', CEP);
//Condição que verifica se existe mais de um endereço com o mesmo nome
if verifica(CEP) then
begin
Messagedlg('Mais de um registro encontrado', mtInformation, [mbOk], 0);
application.CreateForm(TfrmRVarios, frmRVarios);
frmRVarios.show;
end
else
begin
qryAux2.Close;
qryAux2.SQL.Clear;
qryAux2.sql.Add('SELECT END_CEP FROM TBENDERECO WHERE END_NOME='+QUOTEDSTR(CEP));
qryAux2.Open;
DBEdit11.Text:= qryAux2.FieldByName('END_CEP').Asstring;
qryAux2.Close;
//Selecionando os campos da tabela de ENDEREÇO e preenchendo o edit com o resultado
qryAux.SQL.Clear;
qryAux.sql.Add('SELECT END_CODIGO, END_NOME, END_BAIRCOD FROM TBENDERECO WHERE TBENDERECO.END_CEP=' +quotedstr(DBEdit11.text));
qryAux.open;
endereco:= qryAux.FieldByName('END_CODIGO').AsInteger;
bairro:= qryAux.FieldByNamE('END_BAIRCOD').AsInteger;
edtEndereco.text:= qryAux.FieldByName('END_NOME').AsString;
qryAux.Close;
dbedtEndereco.text:= inttostr(endereco);
//Fechando a query e remodulando para procurar o registro de BAIRRO e preencher o edito com o resultado
qryAux.sql.Clear;
qryAux.SQL.Add('SELECT * FROM TBBAIRROS WHERE BAIR_CODIGO=' +inttostr(bairro));
qryAux.open;
edtBairro.Text:= qryAux.FieldByName('BAIR_NOME').AsString;
cidade:= qryAux.FieldByName('BAIR_CIDCOD').AsInteger;
qryAux.Close;
dbedtBairro.text:= inttostr(bairro);
//Mesma função acima com a tabela de CIDADES
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBCIDADES WHERE CID_CODIGO=' +inttostr(cidade));
qryAux.Open;
edtCidade.Text:= qryAux.FieldByName('CID_NOME').AsString;
estado:= qryAux.FieldByName('CID_ESTCOD').AsInteger;
qryAux.Close;
dbedtCidade.text:= inttostr(cidade);
//E por último a mesma função com a tabela de ESTADOS
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBESTADOS WHERE EST_CODIGO=' +inttostr(estado));
qryAux.Open;
edtEstado.text:= qryAux.FieldByName('EST_NOME').AsString;
qryAux.Close;
dbedtEstado.text:= inttostr(estado);
DBEdit5.SetFocus;
//END do Else
end;
//END do Procedure
end;
//Procedure que iniciará o bloco de comandos quando o botão de CONFIRMA for pressionado
procedure TfrmPacientes.Button1Click(Sender: TObject);
begin
//Início da condicional do NOME DO PACIENTE
if(DBEdit1.Text='') then
begin
Messagedlg('O nome do paciente não pode estar em branco!', mtInformation, [mbOk], 0);
dbedit1.setfocus;
end
//Fim da condicional do NOME DO PACIENTE
//Início da condicional do PRONTUÁRIO
else if (dbedit4.Text='') then
begin
Messagedlg('O paciente precisa ter um prontuário!', mtInformation, [mbOk], 0);
if DBEdit4.CanFocus then
dbedit4.SetFocus;
end
//Fim da condicional do PRONTUÁRIO
//Início da condicional do RESPONSÁVEL
else if DBEdit9.Text='' then
begin
Messagedlg('O paciente precisa ter um responsável!', mtInformation, [mbOK], 0);
if DBedit9.CanFocus then
DBEdit9.SetFocus
end
//Fim da condicional do RESPONSÁVEL
//Início da condicional do ENDEREÇO
else if (DBEdit11.Text='') then
begin
if Messagedlg('As informações de "Endereço" não foram preenchidas, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit11.CanFocus then
DBEdit11.SetFocus
end
end
//Fim da condicional do ENDEREÇO
//Início da condicional do COMPLEMENTO
else if (DBEdit10.Text='') then
begin
if Messagedlg('O campo "Nº/Complemento" não foi preenchido, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit10.CanFocus then
DBEdit10.SetFocus
end
end
//Fim da condicional do COMPLEMENTO
//Início da condicional do SARAM
else if DBEdit2.Text='' then
begin
if Messagedlg('O campo "Saram" não foi preenchido, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit2.CanFocus then
DBEdit2.SetFocus
end
end
//Fim da condicional do SARAM
//Início da condicional do TELEFONE
else if DBEdit5.Text='' then
begin
if Messagedlg('Não foi informado um telefone para contato, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit5.CanFocus then
DBEdit5.SetFocus
end
end
//Fim da condicional do TELEFONE
//Início da condicional do NUMERO DA RESIDÊNCIA
else if DBEdit6.Text='' then
begin
if Messagedlg('Não foi informado um número de residência, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit6.CanFocus then
DBEdit6.SetFocus
end
end
//Fim da condicional do NUMERO DA RESIDÊNCIA
//Início da condicional da DATA DE NASCIMENTO
else if (DBEdit3.text='') then
begin
if Messagedlg('O campo "Data de Nascimento" não foi preenchido, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit3.CanFocus then
DBEdit3.SetFocus
end
end
//Fim da condicional da DATA DE NASCIMENTO
else
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close;
//END do Else e fim de TODAS AS CONDICIONAIS ACIMA
end;
//END do Pocedure
end;
//Ao clicar no botão "Cancelar" o Form será fechado
procedure TfrmPacientes.Button2Click(Sender: TObject);
begin
frmPacientes.Close;
end;
//Quando o edito do CEP chegar em 8 dígitos o foco mudará para o edit do NÚMERO DA RESIDÊNCIA
procedure TfrmPacientes.DBEdit11Change(Sender: TObject);
var
endereco, bairro, cidade, estado: integer;
begin
//Início da condicional para verificar se o CEP digitado possui 8 dígitos
if length (dbedit11.text)=8 then
begin
//Início da condicional para verificar se o CEP existe no banco de dados e preencher as informações automaticamente
if VERCEP(DBEdit11.Text) then
begin
//Selecionando os campos da tabela de ENDEREÇO e preenchendo o edit com o resultado
qryAux.SQL.Clear;
qryAux.sql.Add('SELECT END_CODIGO, END_NOME, END_BAIRCOD FROM TBENDERECO WHERE TBENDERECO.END_CEP=' +quotedstr(DBEdit11.text));
qryAux.open;
endereco:= qryAux.FieldByName('END_CODIGO').AsInteger;
bairro:= qryAux.FieldByNamE('END_BAIRCOD').AsInteger;
edtEndereco.text:= qryAux.FieldByName('END_NOME').AsString;
qryAux.Close;
dbedtEndereco.text:= inttostr(endereco);
//Fechando a query e remodulando para procurar o registro de BAIRRO e preencher o edito com o resultado
qryAux.sql.Clear;
qryAux.SQL.Add('SELECT * FROM TBBAIRROS WHERE BAIR_CODIGO=' +inttostr(bairro));
qryAux.open;
edtBairro.Text:= qryAux.FieldByName('BAIR_NOME').AsString;
cidade:= qryAux.FieldByName('BAIR_CIDCOD').AsInteger;
qryAux.Close;
dbedtBairro.text:= inttostr(bairro);
//Mesma função acima com a tabela de CIDADES
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBCIDADES WHERE CID_CODIGO=' +inttostr(cidade));
qryAux.Open;
edtCidade.Text:= qryAux.FieldByName('CID_NOME').AsString;
estado:= qryAux.FieldByName('CID_ESTCOD').AsInteger;
qryAux.Close;
dbedtCidade.text:= inttostr(cidade);
//E por último a mesma função com a tabela de ESTADOS
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBESTADOS WHERE EST_CODIGO=' +inttostr(estado));
qryAux.Open;
edtEstado.text:= qryAux.FieldByName('EST_NOME').AsString;
qryAux.Close;
dbedtEstado.text:= inttostr(estado);
if DBEdit5.CanFocus then
DBEdit5.SetFocus;
end
//Fim do bloco de comando acima
else
Messagedlg('CEP não encontrado!', mtError, [mbOk], 0);
end
//Fim da condicional de verificação do CEP no banco de dados
else
begin
edtEndereco.Clear;
edtBairro.Clear;
edtCidade.Clear;
edtEstado.Clear;
//END do Else e Fim da condicional para verificar se o CEP digitado possui 8 dígitos
end;
//END do Procedure
end;
//Procedure que verificar se as teclas pressionadas para o edit do "CEP" são apenas números
Procedure TfrmPacientes.DBEdit11KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que aplica a máscara ao edit do SARAM
procedure TfrmPacientes.DBEdit2Change(Sender: TObject);
begin
dbedit2.Text := Mascara(dbedit2.Text,'999999-9');
dbedit2.SelStart := Length(dbedit2.Text);
end;
//Procedure que verifica se as teclas pressionadas para o edit do SARAM são apenas números
procedure TfrmPacientes.DBEdit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que aplica a máscara ao edit da DATA DE NASCIMENTO
procedure TfrmPacientes.DBEdit3Change(Sender: TObject);
begin
dbedit3.Text := Mascara(dbedit3.Text,'99/99/9999');
dbedit3.SelStart := Length(dbedit3.Text);
end;
//Procedure que verifica se as teclas pressionadas para o edit da DATA DE NASCIMENTO são apenas números
procedure TfrmPacientes.DBEdit3KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que aplica a máscara ao edit do prontuário
procedure TfrmPacientes.DBEdit4Change(Sender: TObject);
begin
dbedit4.Text := Mascara(dbedit4.Text,'9-99999');
dbedit4.SelStart := Length(dbedit4.Text);
end;
//Procedure que aplica a máscara ao edit do TELEFONE
procedure TfrmPacientes.DBEdit6Change(Sender: TObject);
begin
dbedit6.Text := Mascara(dbedit6.Text,'(99) 9999-9999');
dbedit6.SelStart := Length(dbedit6.Text);
end;
//Procedure que verifica se as teclas pressionadas no edit do TELEFONE são apenas números
procedure TfrmPacientes.DBEdit6KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que muda o foco para o botão "Confirma" quando o edit RAMAL possuir 4 dígitos
procedure TfrmPacientes.DBEdit8Change(Sender: TObject);
begin
if length (dbedit11.text)=4 then
begin
if button1.CanFocus then
button1.SetFocus;
end;
end;
//Procedure do DBRadioGroup do CONVENIO
procedure TfrmPacientes.dbrgConvChange(Sender: TObject);
begin
//Início da condicional que verifica se o valor OUTRO CONVÊNIO foi selecionado
if dbrgConv.ItemIndex=3 then
begin
Label16.Visible:= TRUE;
DBEdit7.Visible:= TRUE
end
else
begin
Label16.Visible:= FALSE;
DBEdit7.Visible:= FALSE
end;
//Fim da condicional que verifica se o valor OUTRO CONVÊNIO foi selecionado
//Início da condicional que verifica se o CONVÊNIO É TITULAR
if (dbrgConv.ItemIndex=0) then
begin
//Início da condicional que verifica se o SEXO É MASCULINO
if (RadioButton3.Checked) then
begin
DBEdit9.Clear;
DBEdit9.Text:='O Próprio';
DBEdit9.Enabled:= FALSE
end
//Fim da condicional que verifica se o SEXO É MASCULINO
//Início da condicional que verifica se o SEXO É FEMININO
else if (RadioButton1.Checked) then
begin
DBEdit9.Clear;
DBEdit9.Text:='A Própria';
DBEdit9.Enabled:= FALSE
end
//Fim da condicional que verifica se o SEXO É FEMININO
end
else
begin
DBEdit9.Enabled:= TRUE;
DBEdit9.Clear;
//END do Else e Fim da condicional que verifica se o CONVÊNIO É TITULAR
end;
//END do Procedure
end;
//Quando o form de pacientes for FECHADO será executado este bloco de comandos
procedure TfrmPacientes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DMPrincipal.TBPacientes.Close;
DMPrincipal.dsAux.Close;
end;
//Quando o form de pacientes for ABERTO será executado este bloco de comandos
procedure TfrmPacientes.FormShow(Sender: TObject);
var
PROXIMO_CODIGO : integer;
begin
//Numeração automatica da tabela PACIENTES
DMPrincipal.TBPacientes.Open;
DMPrincipal.TBPacientes.Last;
PROXIMO_CODIGO:=DMPrincipal.TBPacientes.FieldByName('PAC_CODIGO').AsInteger+1;
DMPrincipal.TBPacientes.Append;
DMPrincipal.TBPacientes.FieldByName('PAC_CODIGO').AsInteger:=PROXIMO_CODIGO;
if DBEdit1.CanFocus then
DBEdit1.SetFocus;
end;
//Procedure que incluirá o SEXO FEMININO no banco de dados
procedure TfrmPacientes.RadioButton1Click(Sender: TObject);
begin
//Início da condicional que verifica se o radio FEMININO está marcado
if RadioButton1.Checked then
begin
dbedtSexo.text:= 'F';
//Início da condicional que verifica se o convênio está setado como TITULAR
if dbrgConv.ItemIndex=0 then
begin
DBEdit9.Clear;
DBEdit9.Text:='A Própria';
DBEdit9.Enabled:= FALSE
end
else
DBEdit9.Enabled:= TRUE
//Fim da condicional que verifica se o convênio está setado como TITULAR
end
//Fim da condicional que verifica se o radio FEMININO está marcado
else
dbedtSexo.Clear;
//END do Procedure
end;
//Procedure que incluirá o SEXO FMASCULINO no banco de dados
procedure TfrmPacientes.RadioButton3Click(Sender: TObject);
begin
if RadioButton3.Checked then
begin
dbedtSexo.text:= 'M';
//Início da condicional que verifica se o convênio está setado como TITULAR
if dbrgConv.ItemIndex=0 then
begin
DBEdit9.Clear;
DBEdit9.Text:='O Próprio';
DBEdit9.Enabled:= FALSE
end
//Fim da condicional que verifica se o convênio está setado como TITULAR
else
DBEdit9.Clear
end
//Fim da condicional que verifica se o radio MASCULINO está marcado
else
dbedtSexo.Clear;
//END fo Procedure
end;
//Função que procura o CEP no banco de dados
function TfrmPacientes.VERCEP(const VER_CEP: String): Boolean;
begin
with DMPrincipal.conexao, DMPrincipal.dsCEP do
begin
//Início da condicional que verifica se o componente "conexao" está conectado ao banco de dados
if not Connected then
Connected := True;
Close;
CommandText := 'SELECT END_CEP FROM TBENDERECO WHERE END_CEP='+quotedstr(VER_CEP);
Open;
if not IsEmpty then
Result := TRUE
else
Result := FALSE
//END do With e fim da condicional que vericifa se o componente "conexao" está conectado ao banco de dados
end;
//END da Função
end;
//Função que verifica se existe mais de uma rua com o mesmo nome no banco de dados
function TfrmPacientes.verifica(const CEP_CHECK: String): Boolean;
begin
with DMPrincipal.conexao, DMPrincipal.dsEnd do
begin
//Início da condicional que verifica se o componente "conexao" está conectado ao banco de dados
if not Connected then //Caso o componente Conexao não esteja conectado ao BD
Connected := True;
Close;
CommandText := 'SELECT DISTINCT ' +
'END_BAIRCOD, END_NOME, END_CEP ' +
'FROM TBENDERECO ' +
'WHERE END_NOME ' +
'In ( ' +
'SELECT END_NOME FROM TBENDERECO WHERE END_NOME=' +quotedstr(CEP_CHECK)+ 'GROUP BY END_NOME HAVING Count(*) > 1) ' +
'ORDER BY END_NOME';
Open;
if not IsEmpty then
Result := TRUE
else
Result := FALSE
//END do With e fim da condicional que vericifa se o componente "conexao" está conectado ao banco de dados
end;
//END da Função
end;
//Função que cria as máscaras para os edits especiais
function TfrmPacientes.Mascara(edt: String;str:String):string;
var
i : integer;
begin
for i := 1 to Length(edt) do
begin
if (str[i] = '9') and not (edt[i] in ['0'..'9']) and (Length(edt)=Length(str)+1) then
delete(edt,i,1);
if (str[i] <> '9') and (edt[i] in ['0'..'9']) then
insert(str[i],edt, i);
end;
result := edt;
end;
end.
Se puderem ajudar ficarei grato.
Estou com um pequeno (e chato) problema em meu projeto de sistema...
Estou criando um sistema para agendamento de fisioterapia, mas o Form de pacientes está retornando um erro logo após o primeiro cadastro.
1. Se a tabela TBPACIENTES do banco de dados estiver VAZIA o form de cadastro para novos pacientes abre normalmente e funciona 100%, mas se tiver ao menos 1 cadastro ao tentar abrir o form o erro: MISSING CONNECTION OR CONNECTION STRING é retornado.
2. Da primeira vez que isso ocorreu eu verifiquei todo o código e corrigi algumas falhas e o programa funcionou 100%, mas logo após ligar o computador e testar o programa novamente o problema voltou.
3. Sou iniciante em DELPHI e não sei debugar.
Segue o código do form:
unit UPacientes;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, DB, ADODB, ExtCtrls, Buttons;
type
TfrmPacientes = class(TForm)
DBEdit1: TDBEdit;
Label2: TLabel;
DBEdit2: TDBEdit;
Label3: TLabel;
DBEdit3: TDBEdit;
Label4: TLabel;
DBEdit4: TDBEdit;
Label5: TLabel;
Label6: TLabel;
DBEdit6: TDBEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
DBEdit10: TDBEdit;
Label11: TLabel;
DBEdit11: TDBEdit;
Label12: TLabel;
Label13: TLabel;
Label14: TLabel;
Button1: TButton;
Button2: TButton;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
qryAux: TADOQuery;
qryAux2: TADOQuery;
edtEndereco: TEdit;
edtBairro: TEdit;
edtCidade: TEdit;
edtEstado: TEdit;
dbedtCidade: TDBEdit;
dbedtBairro: TDBEdit;
dbedtEstado: TDBEdit;
dbedtCodigo: TDBEdit;
dbnPacientes: TDBNavigator;
dbedtEndereco: TDBEdit;
BitBtn1: TBitBtn;
dsQry: TADODataSet;
Label1: TLabel;
Label15: TLabel;
DBEdit5: TDBEdit;
dbedtSexo: TDBEdit;
Label16: TLabel;
DBEdit7: TDBEdit;
DBLookupComboBox3: TDBLookupComboBox;
DBLookupComboBox4: TDBLookupComboBox;
DBLookupComboBox5: TDBLookupComboBox;
Label17: TLabel;
Label18: TLabel;
Label19: TLabel;
Ramal: TLabel;
DBEdit8: TDBEdit;
Label20: TLabel;
DBEdit9: TDBEdit;
dbrgConv: TDBRadioGroup;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
Label22: TLabel;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
Label27: TLabel;
Label28: TLabel;
Label29: TLabel;
Label30: TLabel;
Label31: TLabel;
Label32: TLabel;
Label21: TLabel;
Label33: TLabel;
Label34: TLabel;
Label35: TLabel;
Label36: TLabel;
Label37: TLabel;
Label38: TLabel;
Label39: TLabel;
Label40: TLabel;
Label41: TLabel;
Label42: TLabel;
RadioButton3: TRadioButton;
RadioButton1: TRadioButton;
DBEdit12: TDBEdit;
procedure RadioButton1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure DBEdit6KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit11KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit3Change(Sender: TObject);
procedure DBEdit3KeyPress(Sender: TObject; var Key: Char);
procedure BitBtn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
procedure DBEdit2KeyPress(Sender: TObject; var Key: Char);
procedure DBEdit2Change(Sender: TObject);
procedure DBEdit4Change(Sender: TObject);
procedure DBEdit6Change(Sender: TObject);
procedure DBEdit11Change(Sender: TObject);
procedure RadioButton3Click(Sender: TObject);
procedure dbrgConvChange(Sender: TObject);
procedure DBEdit8Change(Sender: TObject);
procedure FormShow(Sender: TObject);
private
//Função para a máscara dos edits
function MASCARA(edt: String;str:String):string;
//Função para verificar se o CEP existe no banco de dados
function VERIFICA(const CEP_CHECK: String): Boolean;
//Função para buscar o CEP no banco de dados
function VERCEP(const VER_CEP: String): Boolean;
public
{ Public declarations }
end;
var
frmPacientes: TfrmPacientes;
implementation
uses UDMPrincipal, URuaVarios;
{$R *.dfm}
//Quando clicar no botão "?" do CEP ele irá executar o código abaixo
procedure TfrmPacientes.BitBtn1Click(Sender: TObject);
var
endereco, bairro, cidade, estado: integer;
CEP: string;
begin
//Uma caixa de diálogo aparecerá perguntando o nome da rua
inputquery('Consultar CEP', 'Digite o nome da rua', CEP);
//Condição que verifica se existe mais de um endereço com o mesmo nome
if verifica(CEP) then
begin
Messagedlg('Mais de um registro encontrado', mtInformation, [mbOk], 0);
application.CreateForm(TfrmRVarios, frmRVarios);
frmRVarios.show;
end
else
begin
qryAux2.Close;
qryAux2.SQL.Clear;
qryAux2.sql.Add('SELECT END_CEP FROM TBENDERECO WHERE END_NOME='+QUOTEDSTR(CEP));
qryAux2.Open;
DBEdit11.Text:= qryAux2.FieldByName('END_CEP').Asstring;
qryAux2.Close;
//Selecionando os campos da tabela de ENDEREÇO e preenchendo o edit com o resultado
qryAux.SQL.Clear;
qryAux.sql.Add('SELECT END_CODIGO, END_NOME, END_BAIRCOD FROM TBENDERECO WHERE TBENDERECO.END_CEP=' +quotedstr(DBEdit11.text));
qryAux.open;
endereco:= qryAux.FieldByName('END_CODIGO').AsInteger;
bairro:= qryAux.FieldByNamE('END_BAIRCOD').AsInteger;
edtEndereco.text:= qryAux.FieldByName('END_NOME').AsString;
qryAux.Close;
dbedtEndereco.text:= inttostr(endereco);
//Fechando a query e remodulando para procurar o registro de BAIRRO e preencher o edito com o resultado
qryAux.sql.Clear;
qryAux.SQL.Add('SELECT * FROM TBBAIRROS WHERE BAIR_CODIGO=' +inttostr(bairro));
qryAux.open;
edtBairro.Text:= qryAux.FieldByName('BAIR_NOME').AsString;
cidade:= qryAux.FieldByName('BAIR_CIDCOD').AsInteger;
qryAux.Close;
dbedtBairro.text:= inttostr(bairro);
//Mesma função acima com a tabela de CIDADES
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBCIDADES WHERE CID_CODIGO=' +inttostr(cidade));
qryAux.Open;
edtCidade.Text:= qryAux.FieldByName('CID_NOME').AsString;
estado:= qryAux.FieldByName('CID_ESTCOD').AsInteger;
qryAux.Close;
dbedtCidade.text:= inttostr(cidade);
//E por último a mesma função com a tabela de ESTADOS
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBESTADOS WHERE EST_CODIGO=' +inttostr(estado));
qryAux.Open;
edtEstado.text:= qryAux.FieldByName('EST_NOME').AsString;
qryAux.Close;
dbedtEstado.text:= inttostr(estado);
DBEdit5.SetFocus;
//END do Else
end;
//END do Procedure
end;
//Procedure que iniciará o bloco de comandos quando o botão de CONFIRMA for pressionado
procedure TfrmPacientes.Button1Click(Sender: TObject);
begin
//Início da condicional do NOME DO PACIENTE
if(DBEdit1.Text='') then
begin
Messagedlg('O nome do paciente não pode estar em branco!', mtInformation, [mbOk], 0);
dbedit1.setfocus;
end
//Fim da condicional do NOME DO PACIENTE
//Início da condicional do PRONTUÁRIO
else if (dbedit4.Text='') then
begin
Messagedlg('O paciente precisa ter um prontuário!', mtInformation, [mbOk], 0);
if DBEdit4.CanFocus then
dbedit4.SetFocus;
end
//Fim da condicional do PRONTUÁRIO
//Início da condicional do RESPONSÁVEL
else if DBEdit9.Text='' then
begin
Messagedlg('O paciente precisa ter um responsável!', mtInformation, [mbOK], 0);
if DBedit9.CanFocus then
DBEdit9.SetFocus
end
//Fim da condicional do RESPONSÁVEL
//Início da condicional do ENDEREÇO
else if (DBEdit11.Text='') then
begin
if Messagedlg('As informações de "Endereço" não foram preenchidas, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit11.CanFocus then
DBEdit11.SetFocus
end
end
//Fim da condicional do ENDEREÇO
//Início da condicional do COMPLEMENTO
else if (DBEdit10.Text='') then
begin
if Messagedlg('O campo "Nº/Complemento" não foi preenchido, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit10.CanFocus then
DBEdit10.SetFocus
end
end
//Fim da condicional do COMPLEMENTO
//Início da condicional do SARAM
else if DBEdit2.Text='' then
begin
if Messagedlg('O campo "Saram" não foi preenchido, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit2.CanFocus then
DBEdit2.SetFocus
end
end
//Fim da condicional do SARAM
//Início da condicional do TELEFONE
else if DBEdit5.Text='' then
begin
if Messagedlg('Não foi informado um telefone para contato, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit5.CanFocus then
DBEdit5.SetFocus
end
end
//Fim da condicional do TELEFONE
//Início da condicional do NUMERO DA RESIDÊNCIA
else if DBEdit6.Text='' then
begin
if Messagedlg('Não foi informado um número de residência, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit6.CanFocus then
DBEdit6.SetFocus
end
end
//Fim da condicional do NUMERO DA RESIDÊNCIA
//Início da condicional da DATA DE NASCIMENTO
else if (DBEdit3.text='') then
begin
if Messagedlg('O campo "Data de Nascimento" não foi preenchido, deseja cadastrar mesmo assim?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close
end
else
begin
if DBEdit3.CanFocus then
DBEdit3.SetFocus
end
end
//Fim da condicional da DATA DE NASCIMENTO
else
begin
dbnPacientes.BtnClick(nbPost);
showmessage('Paciente cadastrado com sucesso!');
frmPacientes.Close;
//END do Else e fim de TODAS AS CONDICIONAIS ACIMA
end;
//END do Pocedure
end;
//Ao clicar no botão "Cancelar" o Form será fechado
procedure TfrmPacientes.Button2Click(Sender: TObject);
begin
frmPacientes.Close;
end;
//Quando o edito do CEP chegar em 8 dígitos o foco mudará para o edit do NÚMERO DA RESIDÊNCIA
procedure TfrmPacientes.DBEdit11Change(Sender: TObject);
var
endereco, bairro, cidade, estado: integer;
begin
//Início da condicional para verificar se o CEP digitado possui 8 dígitos
if length (dbedit11.text)=8 then
begin
//Início da condicional para verificar se o CEP existe no banco de dados e preencher as informações automaticamente
if VERCEP(DBEdit11.Text) then
begin
//Selecionando os campos da tabela de ENDEREÇO e preenchendo o edit com o resultado
qryAux.SQL.Clear;
qryAux.sql.Add('SELECT END_CODIGO, END_NOME, END_BAIRCOD FROM TBENDERECO WHERE TBENDERECO.END_CEP=' +quotedstr(DBEdit11.text));
qryAux.open;
endereco:= qryAux.FieldByName('END_CODIGO').AsInteger;
bairro:= qryAux.FieldByNamE('END_BAIRCOD').AsInteger;
edtEndereco.text:= qryAux.FieldByName('END_NOME').AsString;
qryAux.Close;
dbedtEndereco.text:= inttostr(endereco);
//Fechando a query e remodulando para procurar o registro de BAIRRO e preencher o edito com o resultado
qryAux.sql.Clear;
qryAux.SQL.Add('SELECT * FROM TBBAIRROS WHERE BAIR_CODIGO=' +inttostr(bairro));
qryAux.open;
edtBairro.Text:= qryAux.FieldByName('BAIR_NOME').AsString;
cidade:= qryAux.FieldByName('BAIR_CIDCOD').AsInteger;
qryAux.Close;
dbedtBairro.text:= inttostr(bairro);
//Mesma função acima com a tabela de CIDADES
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBCIDADES WHERE CID_CODIGO=' +inttostr(cidade));
qryAux.Open;
edtCidade.Text:= qryAux.FieldByName('CID_NOME').AsString;
estado:= qryAux.FieldByName('CID_ESTCOD').AsInteger;
qryAux.Close;
dbedtCidade.text:= inttostr(cidade);
//E por último a mesma função com a tabela de ESTADOS
qryAux.SQL.Clear;
qryAux.SQL.Add('SELECT * FROM TBESTADOS WHERE EST_CODIGO=' +inttostr(estado));
qryAux.Open;
edtEstado.text:= qryAux.FieldByName('EST_NOME').AsString;
qryAux.Close;
dbedtEstado.text:= inttostr(estado);
if DBEdit5.CanFocus then
DBEdit5.SetFocus;
end
//Fim do bloco de comando acima
else
Messagedlg('CEP não encontrado!', mtError, [mbOk], 0);
end
//Fim da condicional de verificação do CEP no banco de dados
else
begin
edtEndereco.Clear;
edtBairro.Clear;
edtCidade.Clear;
edtEstado.Clear;
//END do Else e Fim da condicional para verificar se o CEP digitado possui 8 dígitos
end;
//END do Procedure
end;
//Procedure que verificar se as teclas pressionadas para o edit do "CEP" são apenas números
Procedure TfrmPacientes.DBEdit11KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que aplica a máscara ao edit do SARAM
procedure TfrmPacientes.DBEdit2Change(Sender: TObject);
begin
dbedit2.Text := Mascara(dbedit2.Text,'999999-9');
dbedit2.SelStart := Length(dbedit2.Text);
end;
//Procedure que verifica se as teclas pressionadas para o edit do SARAM são apenas números
procedure TfrmPacientes.DBEdit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que aplica a máscara ao edit da DATA DE NASCIMENTO
procedure TfrmPacientes.DBEdit3Change(Sender: TObject);
begin
dbedit3.Text := Mascara(dbedit3.Text,'99/99/9999');
dbedit3.SelStart := Length(dbedit3.Text);
end;
//Procedure que verifica se as teclas pressionadas para o edit da DATA DE NASCIMENTO são apenas números
procedure TfrmPacientes.DBEdit3KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que aplica a máscara ao edit do prontuário
procedure TfrmPacientes.DBEdit4Change(Sender: TObject);
begin
dbedit4.Text := Mascara(dbedit4.Text,'9-99999');
dbedit4.SelStart := Length(dbedit4.Text);
end;
//Procedure que aplica a máscara ao edit do TELEFONE
procedure TfrmPacientes.DBEdit6Change(Sender: TObject);
begin
dbedit6.Text := Mascara(dbedit6.Text,'(99) 9999-9999');
dbedit6.SelStart := Length(dbedit6.Text);
end;
//Procedure que verifica se as teclas pressionadas no edit do TELEFONE são apenas números
procedure TfrmPacientes.DBEdit6KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then Abort;
end;
//Procedure que muda o foco para o botão "Confirma" quando o edit RAMAL possuir 4 dígitos
procedure TfrmPacientes.DBEdit8Change(Sender: TObject);
begin
if length (dbedit11.text)=4 then
begin
if button1.CanFocus then
button1.SetFocus;
end;
end;
//Procedure do DBRadioGroup do CONVENIO
procedure TfrmPacientes.dbrgConvChange(Sender: TObject);
begin
//Início da condicional que verifica se o valor OUTRO CONVÊNIO foi selecionado
if dbrgConv.ItemIndex=3 then
begin
Label16.Visible:= TRUE;
DBEdit7.Visible:= TRUE
end
else
begin
Label16.Visible:= FALSE;
DBEdit7.Visible:= FALSE
end;
//Fim da condicional que verifica se o valor OUTRO CONVÊNIO foi selecionado
//Início da condicional que verifica se o CONVÊNIO É TITULAR
if (dbrgConv.ItemIndex=0) then
begin
//Início da condicional que verifica se o SEXO É MASCULINO
if (RadioButton3.Checked) then
begin
DBEdit9.Clear;
DBEdit9.Text:='O Próprio';
DBEdit9.Enabled:= FALSE
end
//Fim da condicional que verifica se o SEXO É MASCULINO
//Início da condicional que verifica se o SEXO É FEMININO
else if (RadioButton1.Checked) then
begin
DBEdit9.Clear;
DBEdit9.Text:='A Própria';
DBEdit9.Enabled:= FALSE
end
//Fim da condicional que verifica se o SEXO É FEMININO
end
else
begin
DBEdit9.Enabled:= TRUE;
DBEdit9.Clear;
//END do Else e Fim da condicional que verifica se o CONVÊNIO É TITULAR
end;
//END do Procedure
end;
//Quando o form de pacientes for FECHADO será executado este bloco de comandos
procedure TfrmPacientes.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DMPrincipal.TBPacientes.Close;
DMPrincipal.dsAux.Close;
end;
//Quando o form de pacientes for ABERTO será executado este bloco de comandos
procedure TfrmPacientes.FormShow(Sender: TObject);
var
PROXIMO_CODIGO : integer;
begin
//Numeração automatica da tabela PACIENTES
DMPrincipal.TBPacientes.Open;
DMPrincipal.TBPacientes.Last;
PROXIMO_CODIGO:=DMPrincipal.TBPacientes.FieldByName('PAC_CODIGO').AsInteger+1;
DMPrincipal.TBPacientes.Append;
DMPrincipal.TBPacientes.FieldByName('PAC_CODIGO').AsInteger:=PROXIMO_CODIGO;
if DBEdit1.CanFocus then
DBEdit1.SetFocus;
end;
//Procedure que incluirá o SEXO FEMININO no banco de dados
procedure TfrmPacientes.RadioButton1Click(Sender: TObject);
begin
//Início da condicional que verifica se o radio FEMININO está marcado
if RadioButton1.Checked then
begin
dbedtSexo.text:= 'F';
//Início da condicional que verifica se o convênio está setado como TITULAR
if dbrgConv.ItemIndex=0 then
begin
DBEdit9.Clear;
DBEdit9.Text:='A Própria';
DBEdit9.Enabled:= FALSE
end
else
DBEdit9.Enabled:= TRUE
//Fim da condicional que verifica se o convênio está setado como TITULAR
end
//Fim da condicional que verifica se o radio FEMININO está marcado
else
dbedtSexo.Clear;
//END do Procedure
end;
//Procedure que incluirá o SEXO FMASCULINO no banco de dados
procedure TfrmPacientes.RadioButton3Click(Sender: TObject);
begin
if RadioButton3.Checked then
begin
dbedtSexo.text:= 'M';
//Início da condicional que verifica se o convênio está setado como TITULAR
if dbrgConv.ItemIndex=0 then
begin
DBEdit9.Clear;
DBEdit9.Text:='O Próprio';
DBEdit9.Enabled:= FALSE
end
//Fim da condicional que verifica se o convênio está setado como TITULAR
else
DBEdit9.Clear
end
//Fim da condicional que verifica se o radio MASCULINO está marcado
else
dbedtSexo.Clear;
//END fo Procedure
end;
//Função que procura o CEP no banco de dados
function TfrmPacientes.VERCEP(const VER_CEP: String): Boolean;
begin
with DMPrincipal.conexao, DMPrincipal.dsCEP do
begin
//Início da condicional que verifica se o componente "conexao" está conectado ao banco de dados
if not Connected then
Connected := True;
Close;
CommandText := 'SELECT END_CEP FROM TBENDERECO WHERE END_CEP='+quotedstr(VER_CEP);
Open;
if not IsEmpty then
Result := TRUE
else
Result := FALSE
//END do With e fim da condicional que vericifa se o componente "conexao" está conectado ao banco de dados
end;
//END da Função
end;
//Função que verifica se existe mais de uma rua com o mesmo nome no banco de dados
function TfrmPacientes.verifica(const CEP_CHECK: String): Boolean;
begin
with DMPrincipal.conexao, DMPrincipal.dsEnd do
begin
//Início da condicional que verifica se o componente "conexao" está conectado ao banco de dados
if not Connected then //Caso o componente Conexao não esteja conectado ao BD
Connected := True;
Close;
CommandText := 'SELECT DISTINCT ' +
'END_BAIRCOD, END_NOME, END_CEP ' +
'FROM TBENDERECO ' +
'WHERE END_NOME ' +
'In ( ' +
'SELECT END_NOME FROM TBENDERECO WHERE END_NOME=' +quotedstr(CEP_CHECK)+ 'GROUP BY END_NOME HAVING Count(*) > 1) ' +
'ORDER BY END_NOME';
Open;
if not IsEmpty then
Result := TRUE
else
Result := FALSE
//END do With e fim da condicional que vericifa se o componente "conexao" está conectado ao banco de dados
end;
//END da Função
end;
//Função que cria as máscaras para os edits especiais
function TfrmPacientes.Mascara(edt: String;str:String):string;
var
i : integer;
begin
for i := 1 to Length(edt) do
begin
if (str[i] = '9') and not (edt[i] in ['0'..'9']) and (Length(edt)=Length(str)+1) then
delete(edt,i,1);
if (str[i] <> '9') and (edt[i] in ['0'..'9']) then
insert(str[i],edt, i);
end;
result := edt;
end;
end.
Se puderem ajudar ficarei grato.
Diego Varejão
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)