problema ao exibir os dados no dbgrid inseridos por uma memo
Olá amigos..
Tenho um botão cadastrar que está funcionando,no form cadastrar tem uma memo que recebe registro de atendimento
no form consultar aparecem todos os dados na dbgrid menos os dados da memo. Na coluna regidtrosup que é da memo aparece só escrito (memo)
Não sei como corrigir este erro.
Coloquei este codigo no evento da dbgrid mas não funcionou agradeço a quem possa ajudar
Tenho um botão cadastrar que está funcionando,no form cadastrar tem uma memo que recebe registro de atendimento
no form consultar aparecem todos os dados na dbgrid menos os dados da memo. Na coluna regidtrosup que é da memo aparece só escrito (memo)
Não sei como corrigir este erro.
procedure Tfrmsuporteteccons.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var R : TRect;
begin
R:=Rect;
Dec(R.Bottom,2);
if Column.Field=DM.ADOQuerySqlconstec.FieldByName(''descricaosup'') then
begin
if not (gdSelected in State) then
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.TextRect(R,R.Left,R.Top,
DM.ADOQuerySqlconstec.FieldByName(''descricaosup'').AsString);
end;
end;
end.
Coloquei este codigo no evento da dbgrid mas não funcionou agradeço a quem possa ajudar
Mauricio Nicoli
Curtidas 0
Respostas
Claudia Nogueira
20/09/2012
Olá amigos..
Tenho um botão cadastrar que está funcionando,no form cadastrar tem uma memo que recebe registro de atendimento
no form consultar aparecem todos os dados na dbgrid menos os dados da memo. Na coluna regidtrosup que é da memo aparece só escrito (memo)
Não sei como corrigir este erro.
Coloquei este codigo no evento da dbgrid mas não funcionou agradeço a quem possa ajudar
Tenho um botão cadastrar que está funcionando,no form cadastrar tem uma memo que recebe registro de atendimento
no form consultar aparecem todos os dados na dbgrid menos os dados da memo. Na coluna regidtrosup que é da memo aparece só escrito (memo)
Não sei como corrigir este erro.
procedure Tfrmsuporteteccons.DBGridDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var R : TRect;
begin
R:=Rect;
Dec(R.Bottom,2);
if Column.Field=DM.ADOQuerySqlconstec.FieldByName(''descricaosup'') then
begin
if not (gdSelected in State) then
DBGrid.Canvas.FillRect(Rect);
DBGrid.Canvas.TextRect(R,R.Left,R.Top,
DM.ADOQuerySqlconstec.FieldByName(''descricaosup'').AsString);
end;
end;
end.
Coloquei este codigo no evento da dbgrid mas não funcionou agradeço a quem possa ajudar
Eu não faria dessa forma, eu colocaria na sentença SQL que busca os dados no banco um comando pra converter o blob em string pra uma determinada quantidade de caracteres e aí ligaria o campo do grid a esse field.
Exemplo:
SELECT CAST(SUBSTRING(campo FROM 1 FOR 1000) AS VARCHAR(100)) campo FROM tabela
GOSTEI 0
Mauricio Nicoli
20/09/2012
eu não entendi muito bem seu código..tentei dessa forma..
criei uma função para exibir numa janela as informações da dbgrid inseridas pela memo..
só que tá erro na linha..[b]function MostraMemo(Dts: TDatasource; Dbg: TDBGrid; Fld: TField): Boolean;[/b]
diz que o TDatasource não está identificado..mas este componente eu coloquei num DM e não no form..
private
function MostraMemo(Dts: TDatasource; Dbg: TDBGrid; Fld: TField): Boolean;
{ Private declarations }
...
procedure Tfrmsuporteteccons.DBGridCellClick(Column: TColumn);
begin
MostraMemo(DBGrid.DataSourceconstec, DBGrid, DBGrid.SelectedField);
end;
function Tfrmsuporteteccons.MostraMemo(Dts: TDataSourceconstec;
Dbg: TDBGrid; Fld: TField): Boolean;
var
Frm: TForm;
Ret: Boolean;
Mem: TDBMemo;
begin
Ret := False;
if Dts.DataSet.RecordCount > 0 then
if Dbg.SelectedField = Fld then begin
Ret := True;
Frm := TForm.Create(nil);
try
Frm.Width := 240;
Frm.Height := 120;
Frm.Top := Mouse.CursorPos.Y;
Frm.Left := Mouse.CursorPos.X;
Frm.BorderStyle := bsToolWindow;
Frm.Caption := Fld.DisplayLabel;
Mem := TDBMemo.Create(nil);
try
Mem.Parent := Frm;
Mem.Align := alClient;
Mem.DataSourceconstec := Dts;
Mem.DataField := Fld.FieldName;
Mem.ReadOnly := True;
Mem.ScrollBars := ssVertical;
Frm.ShowModal;
finally
Mem.Free;
end;
finally
Frm.Free;
end;
end;
Result := Ret;
end;
end;
criei uma função para exibir numa janela as informações da dbgrid inseridas pela memo..
só que tá erro na linha..[b]function MostraMemo(Dts: TDatasource; Dbg: TDBGrid; Fld: TField): Boolean;[/b]
diz que o TDatasource não está identificado..mas este componente eu coloquei num DM e não no form..
GOSTEI 0
Claudia Nogueira
20/09/2012
Dá uma olhada nesse exemplo [url]http://www.cdnweb.com.br/tutorial_memo.rar[/url].
GOSTEI 0
Mauricio Nicoli
20/09/2012
gostei muito do seu exemplo..
mas tem como usar o Datasource e o ClientDataSet dentro de um DM e incluir neste exemplo?
mas tem como usar o Datasource e o ClientDataSet dentro de um DM e incluir neste exemplo?
GOSTEI 0
Claudia Nogueira
20/09/2012
gostei muito do seu exemplo..
mas tem como usar o Datasource e o ClientDataSet dentro de um DM e incluir neste exemplo?
mas tem como usar o Datasource e o ClientDataSet dentro de um DM e incluir neste exemplo?
É só colocar os componentes no DM, depois referenciar ele no form. Aí você liga o DBGrid no DataSource que está no DM.
GOSTEI 0
Mauricio Nicoli
20/09/2012
tentei fazer isso sabe..mas não deu..sei que talvez esteja abusando um pouco..mas poderia dar uma olhada no meu código..
a referencia que você fala é no uses? se eu coloco tipo
[code]
function MostraMemo(Dts: TDataSourceconstec; Dbg: TDBGrid; Fld: TField): Boolean; dá erro..
ou
function MostraMemo(Dts: DM.DataSourceconstec; Dbg: TDBGrid; Fld: TField): Boolean; dá erro também
preciso de um auxilio melhor se puder ajudar..
grato
unit Unit10;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids;
type
Tfrmsuporteteccons = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
btnpesquisar: TButton;
DBGrid: TDBGrid;
ComboBoxpesq: TComboBox;
btnpesqreg: TButton;
btnfechar: TButton;
procedure btnfecharClick(Sender: TObject);
procedure btnpesquisarClick(Sender: TObject);
procedure btnpesqregClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure DBGridCellClick(Column: TColumn);
private
function MostraMemo(Dts: TDataSource; Dbg: TDBGrid; Fld: TField): Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
frmsuporteteccons: Tfrmsuporteteccons;
implementation
uses Unit6;
{$R *.dfm}
procedure Tfrmsuporteteccons.btnfecharClick(Sender: TObject);
begin
close;
end;
procedure Tfrmsuporteteccons.btnpesquisarClick(Sender: TObject);
begin
DM.ClientDataSetconstec.close;
DM.ADOQuerySQLconstec.SQL.CLEAR;
DM.ADOQuerySQLconstec.SQL.ADD('select codatend, filial,setor, nomepc, ip, datasup, nomefunc, descricaosup from suportetecnico where filial like :filial');
DM.ADOQuerySQLconstec.Parameters.ParamByName('filial').Value:= comboboxpesq.text + '%';
DM.ClientDataSetconstec.Open;
end;
procedure Tfrmsuporteteccons.btnpesqregClick(Sender: TObject);
begin
DM.ClientDataSetconstec.close;
DM.ADOQuerySqlconstec.Close; // fecha o query
DM.ADOQuerySqlconstec.SQL.Clear; // apaga conteúdo da propriedade Sql
// adiciona o comando SQL
DM.ADOQuerySqlconstec.SQL.Add('SELECT * FROM suportetecnico');
DM.ADOQuerySqlconstec.Open; // executa o query
DM.ClientDataSetconstec.open;
end;
procedure Tfrmsuporteteccons.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
DM.ClientDataSetconstec.Close;
end;
procedure Tfrmsuporteteccons.DBGridCellClick(Column: TColumn);
begin
MostraMemo(DBGrid.DataSourceconstec, DBGrid, DBGrid.SelectedField);
end;
function Tfrmsuporteteccons.MostraMemo(Dts: TDataSource;
Dbg: TDBGrid; Fld: TField): Boolean;
var
Frm: TForm;
Ret: Boolean;
Mem: TDBMemo;
begin
Ret := False;
if Dts.DataSet.RecordCount > 0 then
if Dbg.SelectedField = Fld then begin
Ret := True;
Frm := TForm.Create(nil);
try
Frm.Width := 240;
Frm.Height := 120;
Frm.Top := Mouse.CursorPos.Y;
Frm.Left := Mouse.CursorPos.X;
Frm.BorderStyle := bsToolWindow;
Frm.Caption := Fld.DisplayLabel;
Mem := TDBMemo.Create(nil);
try
Mem.Parent := Frm;
Mem.Align := alClient;
Mem.DataSourceconstec := Dts;
Mem.DataField := Fld.FieldName;
Mem.ReadOnly := True;
Mem.ScrollBars := ssVertical;
Frm.ShowModal;
finally
Mem.Free;
end;
finally
Frm.Free;
end;
end;
Result := Ret;
end;
end;
end.
a referencia que você fala é no uses? se eu coloco tipo
[code]
function MostraMemo(Dts: TDataSourceconstec; Dbg: TDBGrid; Fld: TField): Boolean; dá erro..
ou
function MostraMemo(Dts: DM.DataSourceconstec; Dbg: TDBGrid; Fld: TField): Boolean; dá erro também
preciso de um auxilio melhor se puder ajudar..
grato
GOSTEI 0
Claudia Nogueira
20/09/2012
Quando falo referenciar quero dizer no Uses mesmo, então se o arquivo do DM for Unit6 aí já está referenciado. Se seu DataSource está no DM, você vai na propriedade DataSource do DBGrid e liga ele diretamente no DataSource que está no DM. Só isso já basta e a função é desse jeito mesmo:
Se não funcionar, qual erro está dando?
Fiz o exemplo usando DataModule. Dá uma olhada.
[url]http://www.cdnweb.com.br/tutorial_memo.rar[/url]
function MostraMemo(Dts: TDataSource; Dbg: TDBGrid; Fld: TField): Boolean;
Se não funcionar, qual erro está dando?
Fiz o exemplo usando DataModule. Dá uma olhada.
[url]http://www.cdnweb.com.br/tutorial_memo.rar[/url]
GOSTEI 0
Mauricio Nicoli
20/09/2012
assim..eu olhei seu exmplo..testei aqui e funcionou..
só que neste exemplo o datasource e o ClientDataSet estão no form e o meu está num DM.
antes de tentar arrumar esta questão da memo exibir um texto em uma janela eu tinha testado o meu
dbgrid e ele mostrava todos os campos menos o da memo que só aparecia escrito memo e não fazia nada..
ou seja, minhas conexões funcionam..só que ao inserir o código da função 'mostrarmemo' do exemplo que me enviou
dá o seguinte erro
[b]"o cursor para no TDatasource da função depois da palavra "private" e diz pas.24 "Undeclared identifier: TDatasource"
pas.24 "Undeclared identifier: TField"
[/b]
só que neste exemplo o datasource e o ClientDataSet estão no form e o meu está num DM.
antes de tentar arrumar esta questão da memo exibir um texto em uma janela eu tinha testado o meu
dbgrid e ele mostrava todos os campos menos o da memo que só aparecia escrito memo e não fazia nada..
ou seja, minhas conexões funcionam..só que ao inserir o código da função 'mostrarmemo' do exemplo que me enviou
dá o seguinte erro
[b]"o cursor para no TDatasource da função depois da palavra "private" e diz pas.24 "Undeclared identifier: TDatasource"
pas.24 "Undeclared identifier: TField"
[/b]
GOSTEI 0
Mauricio Nicoli
20/09/2012
No caso no meu Datasource o nome dele no DM e Datasourceconstec e está ligado ao dbgrid via propriedade do datasource..
DM.Datasourceconstec ..isso tá certinho.
DM.Datasourceconstec ..isso tá certinho.
GOSTEI 0
Claudia Nogueira
20/09/2012
No caso no meu Datasource o nome dele no DM e Datasourceconstec e está ligado ao dbgrid via propriedade do datasource..
DM.Datasourceconstec ..isso tá certinho.
DM.Datasourceconstec ..isso tá certinho.
Eu refiz o exemlo usando DataModule, por isso te passei o link novamente.
GOSTEI 0
Mauricio Nicoli
20/09/2012
agradeço pela ajuda..
mas consegui fazer de outra maneira ao invés de usar uma memo pra descição usei um edit mesmo..
é que to com pouco tempo pra terminar o tcc e não posso mais perder tempo..
eu abri o arquivo que vc me mandou e funcionou..
tentei fazer o mesmo no meu trabalho e não deu..porque eu não sei..
mas agradeço pela ajuda..se eu tivesse mais tempo para descobrir o erro e arrumar eu com certeza usaria sei modelo
Grato..
mas consegui fazer de outra maneira ao invés de usar uma memo pra descição usei um edit mesmo..
é que to com pouco tempo pra terminar o tcc e não posso mais perder tempo..
eu abri o arquivo que vc me mandou e funcionou..
tentei fazer o mesmo no meu trabalho e não deu..porque eu não sei..
mas agradeço pela ajuda..se eu tivesse mais tempo para descobrir o erro e arrumar eu com certeza usaria sei modelo
Grato..
GOSTEI 0