Solved

How to connect non db-aware components to a table ?

Posted on 2000-04-12
8
213 Views
Last Modified: 2010-04-04
Hello,

I would like to connect a non db aware memo (TColorMemo) to a MemoField in a table.

I connect other fields to standard TDBMemo or TDBEdit.

Where put the code to
- fill the ColorMemo text with the field value,
- fill the field with the ColorMemo text ?

I would like to synchronize the ColorMemo with the other DBAware controls on the form, and go to edit mode when the user modify the ColorMemo text.

Thanks for the help,

Jean-Pol
0
Comment
Question by:jpdupont
  • 4
  • 4
8 Comments
 
LVL 27

Expert Comment

by:kretzschmar
ID: 2708836
hi jean,

for get
you can use the afterscroll event of
your ttable or tquery and use a code like this
MyColorMemoControl.Text := TBlobField(MyTable.FieldByName('MyMemoField')).AsString;

for set
you can use the beforepost event of
your ttable or tquery and use a code like this
TBlobField(MyTable.FieldByName('MyMemoField')).AsString := MyColorMemoControl.Text

meikl
0
 

Author Comment

by:jpdupont
ID: 2712455
Hi Meikl,

Thanks for the answer. I know this ...
I want a really complete solution : I want the colormemo act as a DBAWARE control ...

Ex : When I put some char in the colormemo, the DBNavigator remains in browse mode. If I put some code in the ColorMemo.Onchange event, I'm able to set the table to edit mode. But when I click on the arrow to scroll to the next record, the content of the memo is not set to the MemoField (In the BeforeScroll, the table state is on "browse" ...).

Table and DataSource have many events ... where put my code ???

If you give me a complete solution, with sample  code I will increase the points ...

Thanks,

Jean-Pol
0
 
LVL 27

Accepted Solution

by:
kretzschmar earned 50 total points
ID: 2713370
hi jean-pol,

there are more ways possible,
i will try to provide one tomorrow.
(late now here)

meikl

0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 2714862
hi jean-pol,

the first try

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Mask, DBCtrls, Db, DBTables, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    DataSource1: TDataSource;
    Table1: TTable;
    DBEdit1: TDBEdit;
    DBNavigator1: TDBNavigator;
    procedure Memo1Change(Sender: TObject);
    procedure Table1AfterScroll(DataSet: TDataSet);
    procedure Table1BeforePost(DataSet: TDataSet);
    procedure Table1AfterCancel(DataSet: TDataSet);
    procedure Table1NewRecord(DataSet: TDataSet);
  private
    fScrollEvent : Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

//if there any change of the memocontent
//memo OnChange event
procedure TForm1.Memo1Change(Sender: TObject);
begin
  if not FScrollEvent then  //avoid editmode afterscroll
    If (Table1.State = dsEdit) or
       (Table1.State = dsInsert) then
     //all ok
    else
      Table1.Edit
  else
    FScrollEvent := False;
end;

//Table AfterScroll Event
procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
begin
  FScrollEvent := True;  //we've a scroll event
  memo1.Text := TBlobField(Table1.FieldByName('Text')).AsString;
end;

//place the memo content into the BlobField
//Table BeforePost Event
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
  TBlobField(Table1.FieldByName('Text')).AsString := memo1.Text;
end;

//edit is canceled, restore memo-content
//Table AfterCancel Event
procedure TForm1.Table1AfterCancel(DataSet: TDataSet);
begin
  memo1.Text := TBlobField(Table1.FieldByName('Text')).AsString;
end;

//clear the memo on newrecord
//Table OnNewRecord Event
procedure TForm1.Table1NewRecord(DataSet: TDataSet);
begin
  memo1.lines.Clear;
end;

end.

let me know, if this match your needs

meikl
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:jpdupont
ID: 2715286
Hi Meikl,

I try your code. One problem :

I scroll the table. OK
I put a few char in the ColorMemo, the table go to EDIT mode : OK
I scroll the table : the ColorMemo text is not posted to the field. (The problem !)

But if I put some char in the ColorMemo AND in a dbedit control, when I scroll the table, the ColorMemo text is correctly posted to the memoField.

I try to force a post in "before scroll" if the table is in edit or insert state : no effect.

Thanks for the help,

Jean-Pol
0
 
LVL 27

Expert Comment

by:kretzschmar
ID: 2716524
hi jean-pol,

how do you scroll the table,
because i didn't have this problem.

i enter some text in the tmemo of my sample
the tabel becomes the edit-state and
use the navigator to scroll to next record,
the post event appears then automatically
and saves the changes,
the afterscroll-event loads
the new content.

meikl
0
 

Author Comment

by:jpdupont
ID: 2716789
Meikl,

I use the DBNavigator to scroll ...
I work with a DBISAMTable.
D5.01 PRO, french, Win98SE.

The post event appears only if I modify a DBAware component (like DBEdit).

If I click on the "Post" button, all is saved ...

JP
0
 

Author Comment

by:jpdupont
ID: 2751900
Any other idea ?
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
This is used to tweak the memory usage for your computer, it is used for servers more so than workstations but just be careful editing registry settings as it may cause irreversible results. I hold no responsibility for anything you do to the regist…
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now