Lentidão na conexão (as vezes)
19/06/2008
0
estou quase ficando doido aqui com meu sistema..e por isso mais uma vez venho solicitar a ajuda de vcs meus amigos...
O problema é o seguinte..
Tenho um sistema que roda em uma rede(rede essa que não tenho nenhum relato de lentidão etc)..
Pus meu software para rodar, e o que acontece é o seguinte, dá o famoso 1 minuto nele, que ele para de responder fica lento para abrir as telas, não faz a consulta direito, e depois volta.... esse problema é mto intermitente por isso fico achando estranho.
Já notei uma certa lentidão qdo duas pessoas vão incluir um registro...parece que demora para abrir as tabelas, o detalhe é que as tabelas não tem 20 registros...
Como poderia identificar se meu problema é no software, no bd(sqlserver2000) ou na minha rede???
precisaria de algumas dicas..
um teste que fiz foi instalar o sql server em outra máquina, mas o problema persiste..
valew!!!
Jm
Posts
19/06/2008
Lucas.corp
esses probleminhas são muito chatos mesmo, e o pior é que no fim de tudo, quase sempre é uma coisa simples de resolver...
boa sorte!
19/06/2008
Jm
andei fazendo vários testes aqui e realmente o problema está no meu software... agora não consigo descobrir onde..
Descobri a seguinte coisa...
Eu incluo em uma máquina, vai tdo bem.
incluo em outra, vai tudo bem,
Qdo estou incluindo em uma máquina e outra começa a incluir, aí começam os problemas.. ele fica lento, na maioria das vezes ele dá erro na hora de gravar
"A linha não pode ser localizada para atualização. Alguns valores podem ter sido alterados desde que ela foi lida pela última vez."
ou seja incluir simultaneamente ele dá erro na maioria das vezes...
estranho isso né..
trabalho com delphi 7, sql server 2000 e conexão ADO..
Seria algum tipo de isolamento??? tá tdo padrão por enquanto..
vai aí o código do formulário que está dando erro...
unit UfrmLigacao; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls, Buttons, Grids, DBGrids, ExtCtrls, ComCtrls, Mask,DB, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient; type TfrmOcorrencias = class(TForm) PCOcorrencias: TPageControl; TsInformacoes: TTabSheet; GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label11: TLabel; edDataAtendimento: TDBEdit; edContatoLigacao: TDBEdit; edatendente: TDBEdit; edTelefone: TDBEdit; edhorainicio: TDBEdit; Label10: TLabel; Label6: TLabel; dbContratante: TDBLookupComboBox; Label5: TLabel; dbSituacao: TDBLookupComboBox; Label7: TLabel; dbObs: TDBMemo; Panel3: TPanel; btnIncluir: TSpeedButton; btnExcluir: TSpeedButton; btnalterar: TSpeedButton; btnabortar: TSpeedButton; btngravar: TSpeedButton; TsOcorrencia: TTabSheet; GroupBox2: TGroupBox; Label8: TLabel; Label14: TLabel; edDescOcorrencia: TDBRichEdit; edlocalOcorrencia: TDBEdit; btnLocalizar: TSpeedButton; Label9: TLabel; dbClassificacao: TDBLookupComboBox; btntelefone: TSpeedButton; btnLocais: TSpeedButton; EDLIGACAO: TDBEdit; Label12: TLabel; dbTipoContato: TDBLookupComboBox; lblverificanumero: TLabel; lbllembrete: TLabel; dbgOcorrencias: TDBGrid; Label15: TLabel; dbNivelUrgencia: TDBLookupComboBox; procedure btnIncluirClick(Sender: TObject); procedure Habilita; procedure FormActivate(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure btnabortarClick(Sender: TObject); procedure btngravarClick(Sender: TObject); procedure btnalterarClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure edTelefoneEnter(Sender: TObject); procedure dbSituacaoExit(Sender: TObject); procedure dbContratanteKeyPress(Sender: TObject; var Key: Char); procedure edTelefoneKeyPress(Sender: TObject; var Key: Char); procedure btnLocaisClick(Sender: TObject); procedure dbClassificacaoKeyPress(Sender: TObject; var Key: Char); procedure EnviaMSG(nivelUrgencia :String); procedure edDescOcorrenciaKeyPress(Sender: TObject; var Key: Char); procedure edContatoLigacaoKeyPress(Sender: TObject; var Key: Char); procedure dbSituacaoKeyPress(Sender: TObject; var Key: Char); procedure btntelefoneClick(Sender: TObject); procedure edDescOcorrenciaEnter(Sender: TObject); procedure edDescOcorrenciaExit(Sender: TObject); procedure dbgOcorrenciasCellClick(Column: TColumn); procedure dbgOcorrenciasDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); procedure FormCreate(Sender: TObject); procedure dbgOcorrenciasDblClick(Sender: TObject); procedure edlocalOcorrenciaKeyPress(Sender: TObject; var Key: Char); function verificacampos : integer; procedure dbNivelUrgenciaKeyPress(Sender: TObject; var Key: Char); procedure dbNivelUrgenciaEnter(Sender: TObject); procedure dbObsEnter(Sender: TObject); procedure dbObsExit(Sender: TObject); procedure verificaFone; procedure dbTipoContatoKeyPress(Sender: TObject; var Key: Char); procedure pesquisaNumero; procedure dbObsKeyPress(Sender: TObject; var Key: Char); private { Private declarations } flagacompanhamento : string; function testaSituacao : integer; //função utilizada para testar a conexão e tentar minimizar os erros. procedure WMHotkey(var Msg: TWMHotkey); message WM_HOTKEY; public { Public declarations } end; var frmOcorrencias: TfrmOcorrencias; acomp_tipocontato : integer; acomp_numero,acomp_contato,acomp_ligacao : string; implementation uses UDM, UfrmPrincipal, UfrmLogin, UfrmPesquisaEndereco, UfrmPesquisaTelefone, UfrmAcompanhamento, UfrmSituacaoProtocolo; {$R *.dfm} function TfrmOcorrencias.testaSituacao : integer; var contador : integer; begin contador := 0; If DM.Conexao.InTransaction then contador := contador + 1; If DM.Atendimento.Active then contador := contador + 1; If DM.Atendimento.State in [dsInsert,dsEdit] then contador := contador +1; result := contador; end; procedure TfrmOcorrencias.pesquisaNumero; begin DM.QVerificaNumero.Close; DM.QVerificaNumero.SQL.Clear; DM.QVerificaNumero.SQL.Add(´SELECT C.NOME AS NOME FROM CLIENTE C INNER JOIN ITENSCONTATOCLIENTE I ON C.CODCLIENTE = I.CODCLIENTE WHERE(I.CODTIPOCONTATO = :PCODTIPOCONTATO) AND (I.NUMERO = :PNUMERO)´); DM.QVerificaNumero.Parameters.ParamByName(´PCODTIPOCONTATO´).Value := dbTipoContato.KeyValue; DM.QVerificaNumero.Parameters.ParamByName(´PNUMERO´).Value := Trim(edTelefone.Text); DM.QVerificaNumero.Open; If not DM.QVerificaNumero.IsEmpty then begin If DM.QVerificaNumero.RecordCount = 1 then begin DM.AtendimentoContato.Value := DM.QVerificaNumeroNOME.Value; edContatoLigacao.SetFocus; edContatoLigacao.SelectAll; lblverificanumero.Visible := False; DM.QVerificaNumero.Close; end; end Else begin DM.QVerificaNumero.Close; DM.QVerificaNumero.SQL.Clear; DM.QVerificaNumero.SQL.Add(´SELECT IDETIFICACAO_ORGAO AS NOME FROM TELEFONES_UTEIS WHERE FONE_ORGAO = :PFONE_ORGAO´); DM.QVerificaNumero.Parameters.ParamByName(´PFONE_ORGAO´).Value := Trim(edTelefone.Text); DM.QVerificaNumero.Open; If not DM.QVerificaNumero.IsEmpty then begin If DM.QVerificaNumero.RecordCount = 1 then begin DM.AtendimentoContato.Value := DM.QVerificaNumeroNOME.Value; edContatoLigacao.SetFocus; edContatoLigacao.SelectAll; lblverificanumero.Visible := False; DM.QVerificaNumero.Close; end; end Else If Trim(edContatoLigacao.Text) <> ´´ then DM.AtendimentoContato.Value := ´´; lblverificanumero.Visible := True; edContatoLigacao.SetFocus; DM.QVerificaNumero.Close; end; end; procedure TfrmOcorrencias.verificaFone; var i : integer; valor : string; begin If Trim(edtelefone.Text) <> ´´ then begin for i := 0 to length(Trim(edtelefone.Text)) do begin valor := copy(trim(edtelefone.Text),i,1); If valor = ´*´ then begin DM.AtendimentoCodTipoContato.Value := 2; dbTipoContato.SetFocus; exit; end; DM.AtendimentoCodTipoContato.Value := 3; dbTipoContato.SetFocus; end; end Else begin Application.MessageBox(´Número de telefone inválido.´,´Telefone´,MB_OK+MB_ICONERROR); edtelefone.SetFocus; end; end; Function TfrmOcorrencias.verificacampos : integer; var erros : integer; begin erros := 0; If Trim(dbSituacao.Text) = ´´ then erros := erros + 1; If ((Trim(dbContratante.Text) = ´´) and (Trim(dbSituacao.Text) <> ´LIGAÇÃO PERDIDA´)) then erros := erros + 1; If flagacompanhamento = ´N´ then begin If Trim(dbSituacao.Text) = ´OCORRÊNCIA´ then begin If Trim(edlocalOcorrencia.Text) = ´´ then erros := erros + 1; If Trim(edDescOcorrencia.Text) = ´´ then erros := erros + 1; If Trim(dbClassificacao.Text) = ´´ then erros := erros + 1; If Trim(dbNivelUrgencia.Text) = ´´ then erros := erros + 1; end; end; result := erros; end; Function RetCodigo(Valor:integer; flag :string):string; var valortemp:string; begin valortemp := InttoStr(Valor); While length(valortemp) < 6 do valortemp := ´0´+valortemp; Result:= flag + ´-´ + valortemp; end; procedure TfrmOcorrencias.WMHotkey(var Msg: TWMHotkey); begin case Msg.HotKey of 1:begin If edTelefone.Focused then begin Application.CreateForm(TfrmPesquisaTelefone,frmPesquisaTelefone); frmPesquisaTelefone.ShowModal; end; end; 2:begin If edlocalOcorrencia.Focused then begin Application.CreateForm(TfrmPesquisaEndereco,frmPesquisaEndereco); frmPesquisaEndereco.ShowModal; end; end; 3:begin If edDescOcorrencia.Focused then begin Application.MessageBox(´Não disponível tela de atalho´,´Informação´,MB_OK+MB_ICONINFORMATION); end; end; end; end; procedure TfrmOcorrencias.EnviaMSG(nivelUrgencia :String); begin Try If not FrmLogin.CSocketLigacao.Connected then try FrmLogin.CSocketLigacao.Connect; Except end; FrmLogin.CSocketLigacao.WriteLn(´NOVO´+nivelUrgencia); except end; end; procedure TfrmOcorrencias.Habilita; begin btnincluir.Enabled := not btnincluir.Enabled; btnexcluir.Enabled := not btnexcluir.Enabled; btnalterar.Enabled := not btnalterar.Enabled; btnabortar.Enabled := not btnabortar.Enabled; btngravar.Enabled := not btngravar.Enabled; btntelefone.Enabled := not btntelefone.Enabled; end; procedure TfrmOcorrencias.btnIncluirClick(Sender: TObject); var erro : string; begin try flagacompanhamento := ´N´; lblverificanumero.Visible := false; DM.Conexao.BeginTrans; DM.Atendimento.Append; //Preenchendo campos DM.AtendimentoOperador.AsString := OPERADOR; DM.AtendimentoData.Value := Date; DM.AtendimentoHora.Value := TimetoStr(time); //verifica se é Ligação recebida ou efetuada If TIPOLIGACAO = ´E´ then begin DM.AtendimentoTipoLigacao.Value := ´EFETUADA´; EDLIGACAO.Color := clLime; EDLIGACAO.Font.Color := clBlack; end Else If TIPOLIGACAO = ´R´ then begin DM.AtendimentoTipoLigacao.Value := ´RECEBIDA´; EDLIGACAO.Color := clRed; EDLIGACAO.Font.Color := clBlack; end; // fim do verifica se é Ligação recebida ou efetuada If not DM.TipoContato.IsEmpty then DM.AtendimentoCodTipoContato.Value := DM.TipoContatoCodTipoContato.AsInteger + 1; //Fim do Preenchendo campos Habilita; dbTipoContato.DragMode := dmManual; dbSituacao.DragMode := dmManual; dbContratante.DragMode := dmManual; dbClassificacao.DragMode := dmManual; dbNivelUrgencia.DragMode := dmManual; If testaSituacao <> 3 then begin Showmessage(´Tente incluir novamente´); exit; close; end; edTelefone.SetFocus; except on E: Exception do begin erro := ´Erro ao incluir registro!´+#13+E.Message; Application.MessageBox(Pchar(erro),´Cadastro´,MB_OK+MB_ICONERROR); Habilita; dbTipoContato.DragMode := dmAutomatic; dbSituacao.DragMode := dmAutomatic; dbTipoContato.DragMode := dmAutomatic; dbClassificacao.DragMode := dmAutomatic; dbNivelUrgencia.DragMode := dmAutomatic; end; end; end; procedure TfrmOcorrencias.FormActivate(Sender: TObject); begin flagacompanhamento := ´´; //zerando variáveis que serão utilizadas no acompanhamento acomp_tipocontato := 0; acomp_numero := ´´; acomp_contato := ´´; acomp_ligacao := ´´; //fim do zerando variáveis que serão utilizadas no acompanhamento DM.Atendimento.Active := true; DM.Ocorrencia.Active := true;; DM.TipoContato.Active := true;; DM.SituacaoLigacao.Active := true; DM.Contratante.Active := true; DM.Classificacao_Ocorr.Active := true; DM.Acompanhamento.Active := true; DM.Nivel_Urgencia.Active := true; //Retira a opção "Sem contato" da tabela tipo contato que não pode estar disponível nesse módulo DM.TipoContato.Filtered := false; DM.TipoContato.Filter := ´TipoContato <>´+QuotedStr(´Sem Contato´); DM.TipoContato.Filtered := True; //Fim do Retira a opção "Sem contato" da tabela tipo contato que não pode estar disponível nesse módulo PCOcorrencias.Pages[1].tabvisible := false; If ((TIPOLIGACAO = ´E´) OR (TIPOLIGACAO = ´R´)) then btnIncluir.Click; end; procedure TfrmOcorrencias.FormKeyPress(Sender: TObject; var Key: Char); begin If key = 13 then Perform(wm_nextdlgctl,0,0); end; procedure TfrmOcorrencias.btnabortarClick(Sender: TObject); var erro : string; begin try DM.Atendimento.Cancel; If DM.Conexao.InTransaction then DM.Conexao.RollbackTrans; Habilita; dbTipoContato.DragMode := dmAutomatic; dbSituacao.DragMode := dmAutomatic; dbContratante.DragMode := dmAutomatic; dbClassificacao.DragMode := dmAutomatic; dbNivelUrgencia.DragMode := dmAutomatic; close; except on E: Exception do begin erro := ´Erro ao abortar registro!´+#13+E.Message; Application.MessageBox(Pchar(erro),´Cadastro´,MB_OK+MB_ICONERROR); Habilita; close; end; end; end; procedure TfrmOcorrencias.btngravarClick(Sender: TObject); var codigo : integer; flag,tipoOcorrencia,msg,nivelUrgencia: string; erro : string; begin Try tipoOcorrencia := ´´; If verificacampos > 0 then begin Application.MessageBox(´Não foram preenchidos todos os campos obrigatórios!´,´Campos obrigatórios´,MB_OK+MB_ICONERROR); frmOcorrencias.SetFocus; exit; end; If flagacompanhamento = ´N´ then begin If DM.dsOcorrencia.State in [dsInsert] then begin DM.Contratante.Edit; codigo := DM.ContratanteSequencia.Value + 1; flag := DM.ContratanteFlag.Value; DM.ContratanteSequencia.Value := DM.ContratanteSequencia.Value + 1; DM.Contratante.Post; DM.OcorrenciaProtocolo.Value := RetCodigo(codigo,flag); DM.OcorrenciaDescricaoOcorrencia.Value := Trim (edDescOcorrencia.Text); DM.OcorrenciaFinalizada.Value := ´0´; DM.OcorrenciaAcompanhamento_valido.Value := ´0´; DM.OcorrenciaResolvendo.Value := ´0´; DM.Ocorrencia.Post; nivelUrgencia := InttoStr(DM.OcorrenciaCodNivelUrgencia.Value); tipoOcorrencia := DM.OcorrenciaProtocolo.Value; end; If DM.dsOcorrencia.State in [dsEdit] then begin DM.Ocorrencia.Post; end; DM.Atendimento.Post; DM.Conexao.CommitTrans; Habilita; Application.MessageBox(´Registro cadastrado com sucesso!´,´Inclusão - Ocorrências´,mb_ok+MB_ICONEXCLAMATION); If Trim(tipoOcorrencia) <> ´´ then begin msg := ´Protocolo gerado número - ´ + tipoOcorrencia; Application.MessageBox(Pchar(msg) ,´Protocolo´,MB_OK+MB_ICONINFORMATION); msg := ´´; EnviaMSG(nivelUrgencia); // Envia mensagem para os Resolvedores end; close; end Else If flagacompanhamento = ´S´ then begin PCOcorrencias.TabIndex := 1; DM.Conexao.CommitTrans; Habilita; close; end; except on E: Exception do begin erro := ´Erro ao gravar registro!´+#13+E.Message; Application.MessageBox(Pchar(erro),´Cadastro´,MB_OK+MB_ICONERROR); Habilita; If DM.Conexao.InTransaction then DM.Conexao.RollbackTrans; end; end; end; procedure TfrmOcorrencias.btnalterarClick(Sender: TObject); var erro : string; begin try DM.Conexao.BeginTrans; DM.Atendimento.Edit; Habilita; dbTipoContato.DragMode := dmManual; dbSituacao.DragMode := dmManual; dbContratante.DragMode := dmManual; dbClassificacao.DragMode := dmManual; dbNivelUrgencia.DragMode := dmManual; except on E: Exception do begin erro := ´Erro ao alterar registro!´+#13+E.Message; Application.MessageBox(Pchar(erro),´Cadastro´,MB_OK+MB_ICONERROR); Habilita; dbTipoContato.DragMode := dmAutomatic; dbSituacao.DragMode := dmAutomatic; dbTipoContato.DragMode := dmAutomatic; dbClassificacao.DragMode := dmAutomatic; dbNivelUrgencia.DragMode := dmAutomatic; end; end; end; procedure TfrmOcorrencias.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin If btngravar.Enabled then begin Application.MessageBox(´Para finalizar a Operação clique em "Abortar" ou "Gravar"´,´Informação´,mb_ok); CanClose := false; end; end; procedure TfrmOcorrencias.FormClose(Sender: TObject; var Action: TCloseAction); begin DM.Atendimento.Close; DM.Ocorrencia.Close; DM.TipoContato.Close; DM.SituacaoLigacao.Close; DM.Contratante.Close; DM.Classificacao_Ocorr.Close; DM.QVerificaOcorrencia.Close; DM.Acompanhamento.Close; DM.Nivel_Urgencia.Close; //limpando o filtro DM.TipoContato.Filtered := false; DM.TipoContato.Filter := ´´; action := cafree; end; procedure TfrmOcorrencias.edTelefoneEnter(Sender: TObject); begin edTelefone.SelectAll; end; procedure TfrmOcorrencias.dbSituacaoExit(Sender: TObject); begin If Trim(dbSituacao.Text) = ´OCORRÊNCIA´ then PCOcorrencias.Pages[1].tabvisible := True Else PCOcorrencias.Pages[1].tabvisible := False; end; procedure TfrmOcorrencias.dbContratanteKeyPress(Sender: TObject; var Key: Char); begin If ((key = #13) or (key = 9)) then begin If Trim(dbSituacao.Text) = ´´ then begin Application.MessageBox(´Contratante inválido!´+´13´+´Preencha corretamente o campo!´,´Contratante´,MB_OK+MB_ICONERROR); dbContratante.SetFocus; exit; end; If Trim(dbSituacao.Text) = ´ACOMPANHEMENTO DE OCORRÊNCIA´ then begin frmOcorrencias.Hide; flagacompanhamento := ´S´; //variáveis que serão usadas no acompanhamento acomp_tipocontato := dbTipoContato.KeyValue; acomp_numero := Trim(edTelefone.Text); acomp_contato := Trim(edContatoLigacao.Text); acomp_ligacao := Trim(EDLIGACAO.Text); //fim das variáveis que serão usadas no acompanhamento Application.CreateForm(TfrmSituacaoProtocolo,frmSituacaoProtocolo); frmSituacaoProtocolo.ShowModal; end Else If PCOcorrencias.Pages[1].tabvisible then begin PCOcorrencias.TabIndex := 1; Try DM.Atendimento.Post; DM.Atendimento.Edit; DM.Ocorrencia.Append; edlocalOcorrencia.SetFocus; except Dm.Conexao.RollbackTrans; Application.MessageBox(´Erro ao tentar incluir os telefones!´,´Inclusão de registro´,MB_OK+MB_ICONERROR); close; end; end Else dbObs.SetFocus; end; If key = 27 then dbSituacao.SetFocus; end; procedure TfrmOcorrencias.edTelefoneKeyPress(Sender: TObject; var Key: Char); begin If key = #13 then verificaFone; If not (key in [´0´..´9´,´*´,8]) then key := 0; end; procedure TfrmOcorrencias.btnLocaisClick(Sender: TObject); begin Application.CreateForm(TfrmPesquisaEndereco,frmPesquisaEndereco); frmPesquisaEndereco.ShowModal; end; procedure TfrmOcorrencias.dbClassificacaoKeyPress(Sender: TObject; var Key: Char); begin If ((key = 13) or (key = 9)) then dbNivelUrgencia.SetFocus; end; procedure TfrmOcorrencias.edDescOcorrenciaKeyPress(Sender: TObject; var Key: Char); begin Key := AnsiUpperCase(Key)[Length(Key)]; end; procedure TfrmOcorrencias.edContatoLigacaoKeyPress(Sender: TObject; var Key: Char); begin If key = 27 then edTelefone.SetFocus; end; procedure TfrmOcorrencias.dbSituacaoKeyPress(Sender: TObject; var Key: Char); begin If key = #27 then edContatoLigacao.SetFocus; end; procedure TfrmOcorrencias.btntelefoneClick(Sender: TObject); begin Application.CreateForm(TfrmPesquisaTelefone,frmPesquisaTelefone); frmPesquisaTelefone.ShowModal; end; procedure TfrmOcorrencias.edDescOcorrenciaEnter(Sender: TObject); begin KeyPreview := false; end; procedure TfrmOcorrencias.edDescOcorrenciaExit(Sender: TObject); begin KeyPreview := True; end; procedure TfrmOcorrencias.dbgOcorrenciasCellClick(Column: TColumn); var Frm : TForm; MM : TDBMemo; //declarar DBCtrls no uses begin If dbgOcorrencias.SelectedField = DM.QVerificaOcorrenciaDESCRICAOOCORRENCIA then begin Frm:=TForm.Create(nil); try Frm.Width := 300; Frm.Height := 160; Frm.Top := Mouse.CursorPos.y; Frm.Left := Mouse.CursorPos.x; Frm.BorderStyle := bsToolWindow; Frm.Caption := ´Protocolo : ´ + DM.QVerificaOcorrenciaPROTOCOLO.AsString; MM := TDBMemo.Create(nil); MM.Color := clInfoBk; MM.Font.Color := clMaroon; try MM.parent := Frm; MM.Align := alclient; mm.DataSource := DM.dsQVerificaOcorrencia; MM.DataField := ´DESCRICAOOCORRENCIA´; Frm.ShowModal; finally MM.free; end; finally Frm.free; end; end; end; procedure TfrmOcorrencias.dbgOcorrenciasDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if (gdSelected in State) then begin //define uma cor de fundo dbgOcorrencias.Canvas.Brush.Color := clInfoBk; dbgOcorrencias.Canvas.Font.Color := clMaroon; dbgOcorrencias.Canvas.FillRect(Rect); // pinta a célula. dbgOcorrencias.DefaultDrawDataCell(rect,Column.field,State); end; end; procedure TfrmOcorrencias.FormCreate(Sender: TObject); begin If not RegisterHotkey(Handle, 1, MOD_CONTROL,ord(´N´)) then Application.MessageBox(´Erro ao programar o atalho para Números de telefones.´,´Programar atalhos´,MB_OK+MB_ICONERROR); If not RegisterHotkey(Handle, 2, MOD_CONTROL,ord(´L´)) then Application.MessageBox(´Erro ao programar o atalho para Endereços.´,´Programar atalhos´,MB_OK+MB_ICONERROR); If not RegisterHotkey(Handle, 3, MOD_CONTROL,ord(´D´)) then Application.MessageBox(´Erro ao programar o atalho para Ocorrências pré-cadastradas.´,´Programar atalhos´,MB_OK+MB_ICONERROR); end; procedure TfrmOcorrencias.dbgOcorrenciasDblClick(Sender: TObject); begin If not DM.QVerificaOcorrencia.IsEmpty then begin flagacompanhamento := ´S´; //Primeiramente cancelar a nova Ocorrencia If DM.dsOcorrencia.State in [dsInsert,dsEdit] then DM.Ocorrencia.Cancel; //Primeiramente cancelar a nova Ocorrencia //Mudar a situação da ligação para Acompanhamento If flagacompanhamento = ´S´ then begin DM.SituacaoLigacao.Locate(´Descricao´,´ACOMPANHEMENTO DE OCORRÊNCIA´,[]); DM.AtendimentoCodSituacao.Value := DM.SituacaoLigacaoCodSituacao.Value; DM.AtendimentoObs.Value := ´Referente ao Protocolo : ´ + DM.QVerificaOcorrencia.fieldbyName(´PROTOCOLO´).Value; DM.Atendimento.Post; end; //Fim do Mudar situação //variáveis que serão usadas no acompanhamento acomp_tipocontato := dbTipoContato.KeyValue; acomp_numero := Trim(edTelefone.Text); acomp_contato := Trim(edContatoLigacao.Text); acomp_ligacao := Trim(EDLIGACAO.Text); //fim das variáveis que serão usadas no acompanhamento DM.Atendimento.Locate(´CODATENDIMENTO´,Trim(DM.QVerificaOcorrencia.fieldbyName(´CODATENDIMENTO´).Value),[]); Application.CreateForm(TfrmAcompanhamento,frmAcompanhamento); frmAcompanhamento.gbResumoOcorrencia.Caption := ´Resumo da Ocorrência : Protocolo - ´ + DM.QVerificaOcorrencia.fieldbyName(´PROTOCOLO´).Value; frmOcorrencias.Hide; frmAcompanhamento.ShowModal; end; end; procedure TfrmOcorrencias.edlocalOcorrenciaKeyPress(Sender: TObject; var Key: Char); begin If ((key = #13) or (key = 9)) then If Trim(edlocalOcorrencia.Text) <> ´´ then begin DM.QVerificaOcorrencia.Close; DM.QVerificaOcorrencia.Parameters.ParamByName(´PCODCONTRATANTE´).Value := dbContratante.KeyValue ; DM.QVerificaOcorrencia.Parameters.ParamByName(´PLOCALOCORRENCIA´).Value := Trim(edlocalOcorrencia.Text)+´¬´; DM.QVerificaOcorrencia.Open; If not DM.QVerificaOcorrencia.IsEmpty then begin frmOcorrencias.Top := frmOcorrencias.Top - 80; frmOcorrencias.Height := frmOcorrencias.Height + 200 ; dbgOcorrencias.Height := 200; end; end Else begin Application.MessageBox(´Endereço inválido´,´Endereço´,MB_OK+MB_ICONERROR); edlocalOcorrencia.SetFocus; end; end; procedure TfrmOcorrencias.dbNivelUrgenciaKeyPress(Sender: TObject; var Key: Char); begin If key = #13 then If btngravar.Visible then btngravar.Click; end; procedure TfrmOcorrencias.dbNivelUrgenciaEnter(Sender: TObject); begin If DM.Ocorrencia.State in [dsInsert] then begin If Trim(dbClassificacao.Text) <> ´´ then DM.OcorrenciaCodNivelUrgencia.Value := DM.Classificacao_OcorrCodNivelUrgencia.Value; end; end; procedure TfrmOcorrencias.dbObsEnter(Sender: TObject); begin lbllembrete.Font.Color := clRed; If Trim(dbSituacao.Text) = ´RONDA A PÉ´ then lbllembrete.Caption := ´Informe o local onde o veículo ficou estacionado!´ Else lbllembrete.Caption := ´Somente acrescente observação se for extremamente necessário para o entendimento da ligação.´; end; procedure TfrmOcorrencias.dbObsExit(Sender: TObject); begin lbllembrete.Font.Color := clMaroon; end; procedure TfrmOcorrencias.dbTipoContatoKeyPress(Sender: TObject; var Key: Char); begin If key = #27 then edtelefone.SetFocus; If key = 13 then begin if dbTipoContato.KeyValue = 3 then begin If length(Trim(edtelefone.Text)) = 8 then begin DM.AtendimentoNumero.Value := ´(11) ´+copy(trim(edtelefone.Text),1,4)+´-´+copy(trim(edtelefone.Text),5,4); pesquisaNumero; end Else If length(Trim(edtelefone.Text)) = 10 then begin DM.AtendimentoNumero.Value := ´(´+copy(trim(edtelefone.Text),1,2)+´) ´+copy(trim(edtelefone.Text),3,4)+´-´+copy(trim(edtelefone.Text),7,4); pesquisaNumero; end Else If length(Trim(edtelefone.Text)) = 11 then begin If (copy(Trim(edtelefone.Text),1,1) = ´0´) then begin DM.AtendimentoNumero.Value := ´(´+copy(trim(edtelefone.Text),2,2)+´) ´+copy(trim(edtelefone.Text),4,4)+´-´+copy(trim(edtelefone.Text),8,4); pesquisaNumero; end; end end else pesquisaNumero; end; end; procedure TfrmOcorrencias.dbObsKeyPress(Sender: TObject; var Key: Char); begin If key = #13 then btngravar.Click; end; end.
20/06/2008
Lucas.corp
dei uma olhada no código todo e pelo que tu me disse concluí que os problemas começam ao criar e então ATIVAR o formulário:
No final do procedimento de activate tu já tá mandando incluir o registro mas não posta ele no final do procedimento de inclusão, e só posta ao acionar o botão de gravar certo?
pelo método como é feito a manipulação de dados está ocorrendo a lentidão e o erro ao gravar, já que em uma máquina só, com um registro em aberto não há problemas certo.
experimente postar o registro no final do procedimento de inclusão e quando precisar adicionar informações abra-o e poste logo em seguida.. se for possível
testa aí e me avisa
qualquer coisa se entendi errado me diga que vo dá mais uma pensada aqui. mas acho que estamos no caminho.
valeu!
20/06/2008
Lucas.corp
ele tá se perdendo pois tu abre dois registros e o programa não sabe manipular os dois ao mesmo tempo...
Clique aqui para fazer login e interagir na Comunidade :)