delphi - Data from ListBox to DataSet -
i have dbgrid
load names datasetpeople
associated table_people
. create drag , drop procedure, user can drag name , drop listbox
. user can drop listbox_employees
or listbox_manager
.
my problem
i want create relationship between people table_people
using names user drop in both listbox. create table_relationship
employeeid
match managerid
.
so, how can name each listbox
, associate name id, , put id employeeid
or managerid
datasetrelationship
associated table_relationship
?
if ids numeric (integer) values, can use tlistbox.items.objects
store when fill (in drop event handler on form):
var personname: string; personid: integer; begin yourdatamodule // gives access tables in data module begin personname := table_people.fieldbyname('employeename').asstring; personid := table_people.fieldbyname('employeeid').asinteger); end; listbox_employees.items.addobject(personname, tobject(personid); end;
for manager, change listbox manager , field values manager.
to id out use insert
statement:
// make sure both listboxes have same number of items, of course. var employeeid: integer; managerid: integer; i: integer; begin := 0 listbox_employees.items.count - 1 begin employeeid := integer(listbox_employees.items.objects[i]); managerid := integer(listbox_manager.items.objects[i]); if not yourdatamodule.makerelationship(employeeid, managerid) showmessage('unable relate employee , manager!'); end; end; // if you're using sql query, `insert` should created // somewhere, in datamodule's oncreate event // qryrelationships.sql.clear; // qryrelationships.sql.add('insert table_relationship (employeeid, managerid)'); // qryrelationships.sql.add('values (:employeeid, :managerid)'; // // or can type sql property in object inspector @ designtime // insert table_relationship (employeeid, managerid) values (:employeeid, :managerid) function tyourdatamodule.makerelationship(const empid, mgrid: integer): boolean; begin result := false; // insert dataset: qryrelationships.parambyname('employeeid').asinteger := empid; qryrelationships.parambyname('managerid').asinteger := mgrid; try qryrelationships.execsql; result := qryrelationships.rowsaffected; qryrelationships.close; end; end; // if you're using table instead of query, getting result harder function tyourdatamodule.makerelationship(const empid, mgrid: integer): boolean; begin result := true; try tblrelationships.insert; tblrelationships.fieldbyname('employeeid').asinteger := empid; tblrelationships.fieldbyname('managerid').asinteger := mgrid; tblrelationships.post; except result := false; end; end;
Comments
Post a Comment