Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 09.02.2016, 22:59
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Цитата:
Сообщение от Страдалецъ
Можно скомбинировать формирование запроса. Поскольку имена таблиц нельзя задавать параметром, то часть запроса собираем как текст, а дальше параметром задаем дату:
Код:
ADOQuery1.SQL.Text:='SELECT * FROM '+PageControl1.ActivePage.Caption+' WHERE  [Сроки исполнения] < :Date';
ADOQuery1.Parameters.ParamValues['Date'] := d1;
ADOQuery1.Open;
Так заработает?
Нет не работает, но я сделал по другому не много, вообщем это в прошлом)
Спасибо за помощь
Ответить с цитированием
  #17  
Старый 10.02.2016, 08:37
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

C дата тайм пикером так и не понял
объясните как использовать обработчик для динамически созданного объекта

DBGrid создаю так

Код:
var
  Form1: TForm1;
  DBGrid:TDbgrid;
procedure TForm1.Button1Click(Sender: TObject);
begin
DBGrid:=tdbgrid.Create(TabSheet);
DBGrid.Parent:=TabSheet;
DBGrid.Align:=alClient;
end;
как для ДБГрид мне использовать событие OnCellClick
Ответить с цитированием
  #18  
Старый 10.02.2016, 14:51
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Как я понял, вам надо нечто такое:
Код:
unit Unit9;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, Grids, DBGrids, DB, ADODB;

type
  TForm9 = class(TForm)
    Button1: TButton;
    PageControl1: TPageControl;
    ADOConnection1: TADOConnection;
    ListBox1: TListBox;
    DateTimePicker1: TDateTimePicker;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
    procedure DBGridCellClick(Column: TColumn);
    procedure DateTimePicker1Change(Sender: TObject);
  end;

var
  Form9: TForm9;

implementation

{$R *.dfm}

procedure TForm9.DBGridCellClick(Column: TColumn);
begin
 if Column.Field.DataType in [ftDate,ftDateTime]
 then begin
      DateTimePicker1.Tag := Integer(Column.Field);
      DateTimePicker1.DateTime := Column.Field.AsDateTime;
      DateTimePicker1.Left := Mouse.CursorPos.X - Left - 5;
      DateTimePicker1.Top := Mouse.CursorPos.Y - Top - 30;
      DateTimePicker1.Show;
      end;
end;

procedure TForm9.DateTimePicker1Change(Sender: TObject);
Var
  Field: TField;
begin
 Field := TField(DateTimePicker1.Tag);
 Field.DataSet.Edit;
 Field.Value := DateTimePicker1.DateTime;
 Field.DataSet.Post;
 DateTimePicker1.Hide;
end;

procedure TForm9.ListBox1DblClick(Sender: TObject);
Var
  TabSheet: TTabSheet;
  Grid: TDBGrid;
  Tbl: TAdoTable;
  i: Integer;
  DateField: TDateTimePicker;
begin
 TabSheet := TTabSheet.Create(PageControl1);
 TabSheet.PageControl := PageControl1;
 TabSheet.Caption := ListBox1.Items[ListBox1.ItemIndex];
 PageControl1.TabIndex := PageControl1.PageCount - 1;
 Tbl := TAdoTable.Create(TabSheet);
 Tbl.Connection := ADOConnection1;
 Tbl.CursorLocation := clUseServer;
 Tbl.TableName := ListBox1.Items[ListBox1.ItemIndex];
 Grid := TDBGrid.Create(TabSheet);
 Grid.Parent := TabSheet;
 Grid.Align := alClient;
 Grid.DataSource := TDataSource.Create(TabSheet);
 Grid.DataSource.DataSet := Tbl;
 Grid.OnCellClick := DBGridCellClick;
 Tbl.Open;
end;

procedure TForm9.Button1Click(Sender: TObject);
begin
 ADOConnection1.Open;
 ADOConnection1.GetTableNames(ListBox1.Items);
end;

end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 10.02.2016 в 15:00.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
ApxaHGe1 (14.02.2016)
  #19  
Старый 11.02.2016, 13:14
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Еще вопрос... как все столбцы выравнять по границе формы? Т.е. при рисайзе формы dbgrid то же меняет размеры до размера форм. И тогда все столбцы видны. А когда сделаешь маленький размер формы половину столбцов не видно... можно ли как это исправить? Что бы размеры динамически подгонялись? И сделать перенос слов по границе столбца?
Ответить с цитированием
  #20  
Старый 11.02.2016, 15:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Перенос сделать не очень просто, надо пересчитывать высоту всех видимых строк, т.е. отрисовку реализовывать самому.
Можно пойти немного другим путем, через автоподбор ширины столбцов, может вам и этого хватит:
Код:
procedure TForm9.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
Var CellWidth: Integer;
begin
 CellWidth := Canvas.TextWidth(' '+Field.AsString+' ');
 if CellWidth > TDBGrid(Sender).Columns.Items[Field.Index].Width
 then TDBGrid(Sender).Columns.Items[Field.Index].Width := CellWidth;
end;

procedure TForm9.FormCreate(Sender: TObject);
Var i: Integer;
begin
 for i := 0 to DBGrid1.Columns.Count - 1
 do DBGrid1.Columns.Items[i].Width := 60;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
ApxaHGe1 (17.05.2016)
  #21  
Старый 11.02.2016, 23:10
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

У меня так же сделаноprocedure TForm9.FormCreate(Sender: TObject);
Var i: Integer;
begin
for i := 0 to DBGrid1.Columns.Count - 1
do DBGrid1.Columns.Items[i].Width := 60;
end;
Ответить с цитированием
  #22  
Старый 12.02.2016, 21:50
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Народ, осталась последняя мелочь....
Подскажите плиз
как сделать что бы при событии, когда я изменяю дату в столбце "Фактический Срок Исполнения" через DateTimePicker, он сравнивал эту дату(новую которую я выбрал) с датой из столбца "Срок исполнения" и если дата фактического исполнения старше даты Срока исполнения то в статус записывал НЕ ВЫПОЛНЕНО! и обратно, если даты равны или меньше по времени, то написал ВЫПОЛНЕНО


Последний раз редактировалось ApxaHGe1, 12.02.2016 в 22:38.
Ответить с цитированием
  #23  
Старый 16.02.2016, 01:05
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Тему можно закрыть! Всем спасибо за помощь
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter