Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2010, 10:03   #1
BALLIN
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 10
Вопрос CheckListBox

Помогите пожалуйста
У меня такая проблема:
есть база данных в которой хранятся задания которые должны выполнить сотрудники фирмы(для каждого своя) задания назначаются начальником . И после выполнения конкретного задания пользователь(сотрудник фирмы) должен в программе отметить ее как сделанную, чтобы она убралась из списка его задач.
Я использую CheckListBoх. Для каждого задания в базе данных существует его уникальный код (id), текст задания(text) и поле stat в которое и должно записываться 1, когда задание выполнено. И у меня возникла проблема с тем, чтобы как для выбранных строк в CheckListBox в базе данных записать в поле stat единицу.
извините если что не так написал.
BALLIN вне форума Ответить с цитированием
Старый 13.04.2010, 10:23   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Смотри:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, StdCtrls, CheckLst;

type
  TID=class
   id:string;
  end;
  TForm1 = class(TForm)
    CheckListBox1: TCheckListBox;
    Table1: TTable;
    procedure FormCreate(Sender: TObject);
    procedure CheckListBox1ClickCheck(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
 var t:TID;
begin
 Table1.First;
 while not Table1.Eof do begin
  t:=TID.Create;
  t.id:=table1.Fields[0].AsString;
  CheckListBox1.AddItem(t.id,t);
  Table1.Next;
 end;
end;

procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
var i:integer;
begin
 Caption:='';
 for i:=0 to CheckListBox1.Count-1 do
  if CheckListBox1.Checked[i] then
    caption:=Caption+' '+TID(CheckListBox1.Items.Objects[i]).id;
end;

end.
Оформляешь обьект с полем, в которое пихаешь запись из базы.
Обьект прикрепляешь к соответствуюшему элементу ЛистБокса.
А потом выбираешь его, и получаешь из его поля нужные ID или че там надебно.

Уловил идею?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.04.2010, 10:36   #3
BALLIN
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 10
По умолчанию

Ну в принципе понял))
я вот уже делал, вот как у меня это выглядет:
Код:
type
 tas=record
    id:longint;
    id_tem:longint;
    text:string;
    datrg,datexit:double;
    stat:string;
    infa:widestring;
    usv:longint;
   end;
  TForm3 = class(TForm)
    ADOQuery1: TADOQuery;
    ADOConnection1: TADOConnection;
    CheckListBox1: TCheckListBox;
    Button1: TButton;
    procedure CheckListBox1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  tas2:array of tas;
  z1:integer;
  b:integer;
  c:integer;
implementation

uses Unit1;

{$R *.dfm}
procedure ListBox_update;
var
 i:integer;
begin
b:=0;
SetLength(tas2,0);
 form3.CheckListBox1.Items.Clear;
 form3.ADOQuery1.SQL.Clear;
 form3.ADOQuery1.SQL.Append('select* from tasks where id='+IntToStr(a));
 form3.ADOQuery1.Open;
 b:=form3.adoquery1.FieldByName('id_tem').asInteger;
 form3.ADOQuery1.Close;
 form3.ADOQuery1.SQL.Clear;
 form3.ADOQuery1.SQL.Append('select* from tasks where stat <> 1 and id_tem='+IntToStr(b));
 form3.ADOQuery1.Open;
  if form3.ADOQuery1.RecordCount>0
  then
   begin form3.ADOQuery1.First;
   i:=0;
    while not form3.ADOQuery1.Eof do
     begin
      setlength(tas2,length(tas2)+1);
      tas2[i].id:=form3.ADOQuery1.FieldValues['id'];
      tas2[i].id_tem:=form3.ADOQuery1.FieldValues['id_tem'];
      tas2[i].text:=form3.ADOQuery1.FieldValues['text'];
      tas2[i].datrg:=form3.ADOQuery1.FieldValues['datrg'];
      tas2[i].datexit:=form3.ADOQuery1.FieldValues['datexit'];
      tas2[i].stat:=form3.ADOQuery1.FieldValues['stat'];
      tas2[i].infa:=form3.ADOQuery1.FieldValues['infa'];
      form3.CheckListBox1.Items.Add(tas2[i].text + '   Выполнить до' +FloatToStr(tas2[i].datexit));
      form3.ADOQuery1.Next;
      i:=i+1;
     end;
     z1:=i-1;
    end;
    {for k:=0 to form3.CheckListBox1.Items.Count - 1 do
 if form3.CheckListBox1.Checked[k] then
 if form3.adoquery1.RecordCount=0 then begin
   form3.adoquery1.Append;
   form3.adoquery1.FieldValues['stat']:=t;
   form3.adoquery1.Post;;  }
 form3.ADOQuery1.Close;
end;
procedure TForm3.Button1Click(Sender: TObject);
Var
t,i:integer;
 {s:string; }
begin
t:=1;
{if adoquery1.RecordCount=0 then}

 for i:=0 to form3.CheckListBox1.Items.Count - 1 do
     begin
            form3.ADOQuery1.SQL.Clear;
            form3.ADOQuery1.SQL.Append('select id from tasks where id_tem='+ IntToStr(b));
            form3.ADOQuery1.Open;
            c:=form3.adoquery1.FieldByName('id').asInteger;
            form3.ADOQuery1.Close;
            {form3.ADOQuery1.SQL.Clear;
            form3.ADOQuery1.SQL.Append('select proj from workers where proj='+ IntToStr(a));
            form3.ADOQuery1.Open;
            c:=form3.adoquery1.FieldByName('usv').asInteger;
            form3.ADOQuery1.Close;      }
         if form3.CheckListBox1.Checked[i] then
           begin
            form3.adoquery1.sql.text:='update tasks set stat=1';
            {form3.adoquery1.Parameters.ParamByName('my_id').Value:=c;   }
            form3.adoquery1.ExecSql;
            showMessage('Выполненно');
           end;
     end;
form3.ADOQuery1.Close;
ListBox_update;
end;

Но у меня как раз возникла проблема в том как выбрать именно для каждой записи его id чтобы уже дальше прописать статус, он у меня потому что только одну запись выберает.
Сейчас попробую как вы посоветовали)))

Table1-это тут должно быть название моей базы? или это компонент такой?

и подскажите пожалуйста как можно полутить текст выбранной строчки в ChecklistBox, а то у меня получается что он выводит текст всех строчек((

Последний раз редактировалось Stilet; 14.04.2010 в 10:46.
BALLIN вне форума Ответить с цитированием
Старый 14.04.2010, 11:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Table1-это компонент, подключенный к базе данных, к конкретной таблице.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2010, 11:37   #5
BALLIN
Пользователь
 
Регистрация: 13.04.2010
Сообщений: 10
По умолчанию

А как мне подключить к нему мою таблицу?
BALLIN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CheckListBox jahongir007 Общие вопросы Delphi 4 07.06.2009 12:10
Checklistbox, Delphi gleban Помощь студентам 1 02.06.2009 22:24
Отрисовка CheckListBox. NikLik Компоненты Delphi 0 21.09.2008 21:58
Checklistbox RealSHELS Общие вопросы Delphi 3 30.07.2008 22:40
CheckListBox ivp88 Компоненты Delphi 4 12.05.2007 15:49