powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBGrid - определенные поля для чтения
29 сообщений из 29, показаны все 2 страниц
DBGrid - определенные поля для чтения
    #40083537
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Помогите пожалуйста решить задачу. Есть DBGrid, в который выводится результат запроса ADOQuery. Необходимо сделать часть полей для чтения, а остальную часть открытую для редактирования. Пробовал и так:
vdpmrForm.DBGrid.Columns[39].ReadOnly := true;

И вот так через ADOTable:
vdpmrForm.ADOTable.FieldByName('FIELD').ReadOnly := true;

Что-то не так делаю, ибо результата нет. Все поля DBGrid как были открыты для редактирования, так и остались, включая и поле FIELD.
Вопрос, что именно не так.
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083538
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, форумом ошибся)
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083539
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просьба перенести в раздел Delphi, чтобы темы не плодить
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083540
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, шобы ты не жаловался на MSSQL-щиков.

Бесплатный рецепт.

В запросе делаешь поле вычисляемым - и фсе.

Код: sql
1.
2.
3.
4.
5.
select поле from Таблица

-- переделываешь

select поле + '' as поле from Таблица



Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083554
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
В запросе делаешь поле вычисляемым - и фсе

И что грид не даёт их редактировать ?
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083557
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdpmr
Добрый день.
Помогите пожалуйста решить задачу. Есть DBGrid, в который выводится результат запроса ADOQuery. Необходимо сделать часть полей для чтения, а остальную часть открытую для редактирования. Пробовал и так:
vdpmrForm.DBGrid.Columns[39].ReadOnly := true;

И вот так через ADOTable:
vdpmrForm.ADOTable.FieldByName('FIELD').ReadOnly := true;

Что-то не так делаю, ибо результата нет. Все поля DBGrid как были открыты для редактирования, так и остались, включая и поле FIELD.
Вопрос, что именно не так.
DBGrid1.DataSource.DataSet.Fields[1].ReadOnly := true;
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083558
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
  with TDBGrid(Sender) do
   if Columns[SelectedIndex].ReadOnly
     then Options := Options - [dgEditing]
     else Options := Options + [dgEditing];
end;
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083559
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083561
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть ешё http://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.DBGrids.TColumn.ReadOnly
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083562
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъDBGrid1.DataSource.DataSet.Fields[1].ReadOnly := true;



Странно, что люди даже не читают что написано в первом топике
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083563
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего странного если в NNTP приезжает не весь топик, а только его огрызок, начиная с
нечитаемого модераториала.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083566
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ, не помогло
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083568
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, вот у меня получилось, как на видео, но так на всех полях. И там где установил ReadOnly := false
Такое ощущение, что именно эта команда и не срабатывает.
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083569
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdpmrDimaBr, вот у меня получилось, как на видео, но так на всех полях.
Уточню. Как на видео в поле FIO
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083570
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdpmr
DimaBr, вот у меня получилось, как на видео, но так на всех полях. И там где установил ReadOnly := false
Такое ощущение, что именно эта команда и не срабатывает.

Смотрите внимательно на код. Он запрещает/разрешает редактирование в зависимости от ReadOnly колонки.
Вы можете переделать на свой вариант
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083571
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, да, я понял смысл кода. Там проблема, что именно ReadOnly колонки в false не устанавливается почему-то
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083572
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vdpmr
ъъъъъ, не помогло

Врёшь. Код давай.
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083573
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdpmr
DimaBr, да, я понял смысл кода. Там проблема, что именно ReadOnly колонки в false не устанавливается почему-то

Меняю "шило на мыло". Что я делаю не так ?
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083576
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ, в компоненте DBGrid св-во ReadOnly установлено в true

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB, ExtCtrls, DBCtrls, IniFiles,
  CheckLst, ToolWin, ComCtrls, ImgList, Buttons, ComObj;

type
  TForm2 = class(TForm)

    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    CheckBox1: TCheckBox;
    DBNavigator1: TDBNavigator;
    Button1: TButton;
    ImageList1: TImageList;
    SpeedButton1: TSpeedButton;
    ADOTable1: TADOTable;
    ADOTable2: TADOTable;
    procedure FormCreate(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure DBGrid1ColEnter(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
  end;

var
  Form2: TForm2;
  Ini : Tinifile;
  main, note : String;

implementation

uses Unit1, Unit3;

{$R *.dfm}

//------------------------------------------------------------------------------

procedure ColumnReadOnlyFalse;
begin
  Form2.DBGrid1.DataSource.DataSet.Fields[1].ReadOnly := false;
end;

//------------------------------------------------------------------------------

procedure AllUsers;
begin
  Form2.ADOQuery1.Active := false;
  Form2.ADOQuery1.SQL.Clear;
  Form2.ADOQuery1.SQL.Add('select');
  Form2.ADOQuery1.SQL.Add('m.*,');
  Form2.ADOQuery1.SQL.Add('n.a_date_pmd_ruch,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_InNumb,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_Date,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_Reason,');
  Form2.ADOQuery1.SQL.Add('n.date_expert,');
  Form2.ADOQuery1.SQL.Add('n.fio_exp_kmp,');
  Form2.ADOQuery1.SQL.Add('n.date_expert_vozv,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_GOR,');
  Form2.ADOQuery1.SQL.Add('n.PRIM,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_OPERATOR,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_TIMESTAMP');
  Form2.ADOQuery1.SQL.Add('from base_x.dbo.' + main + ' m');
  Form2.ADOQuery1.SQL.Add('left join base_x.dbo.' + note + ' n on n.id_schet_sluch = m.id_schet_sluch');
  Form2.ADOQuery1.Active := true;
  Form2.DBNavigator1.Visible := false;
end;

//------------------------------------------------------------------------------

procedure CurrentUser;
begin
  Form2.ADOQuery1.Active := false;
  Form2.ADOQuery1.SQL.Clear;
  Form2.ADOQuery1.SQL.Add('select');
  Form2.ADOQuery1.SQL.Add('m.*,');
  Form2.ADOQuery1.SQL.Add('n.a_date_pmd_ruch,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_InNumb,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_Date,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_Reason,');
  Form2.ADOQuery1.SQL.Add('n.date_expert,');
  Form2.ADOQuery1.SQL.Add('n.fio_exp_kmp,');
  Form2.ADOQuery1.SQL.Add('n.date_expert_vozv,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_GOR,');
  Form2.ADOQuery1.SQL.Add('n.PRIM,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_OPERATOR,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_TIMESTAMP');
  Form2.ADOQuery1.SQL.Add('from base_x.dbo.' + main + ' m');
  Form2.ADOQuery1.SQL.Add('left join base_x.dbo.' + note + ' n on n.id_schet_sluch = m.id_schet_sluch');
  Form2.ADOQuery1.SQL.Add('where 1=1');
  Form2.ADOQuery1.SQL.Add('and m.fio_exp = ' + quotedStr(UsernameShort));
  Form2.ADOQuery1.Active := true;
  ColumnReadOnlyFalse();
  Form2.DBNavigator1.Visible := true;
end;

//------------------------------------------------------------------------------

procedure AdminUser;
begin
  Form2.DBGrid1.ReadOnly := true;
  Form2.ADOQuery1.Active := false;
  Form2.ADOQuery1.SQL.Clear;
  Form2.ADOQuery1.SQL.Add('select');
  Form2.ADOQuery1.SQL.Add('m.*,');
  Form2.ADOQuery1.SQL.Add('n.a_date_pmd_ruch,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_InNumb,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_Date,');
  Form2.ADOQuery1.SQL.Add('n.DecryptMailMO_Reason,');
  Form2.ADOQuery1.SQL.Add('n.date_expert,');
  Form2.ADOQuery1.SQL.Add('n.fio_exp_kmp,');
  Form2.ADOQuery1.SQL.Add('n.date_expert_vozv,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_GOR,');
  Form2.ADOQuery1.SQL.Add('n.PRIM,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_OPERATOR,');
  Form2.ADOQuery1.SQL.Add('n.PRIM_TIMESTAMP');
  Form2.ADOQuery1.SQL.Add('from base_x.dbo.' + main + ' m');
  Form2.ADOQuery1.SQL.Add('left join base_x.dbo.' + note + ' n on n.id_schet_sluch = m.id_schet_sluch');
  Form2.ADOQuery1.Active := true;
  ColumnReadOnlyFalse();
  Form2.DBNavigator1.Visible := true;
end;

//------------------------------------------------------------------------------

procedure TForm2.FormCreate(Sender: TObject);
begin
  Ini := TiniFile.Create(extractfilepath(paramstr(0))+'settings.ini');
  main := Ini.ReadString('main','main','');
  note := Ini.ReadString('note','note','');

  AllUsers();
end;

//------------------------------------------------------------------------------

procedure TForm2.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked = true then
  begin
    if role = 1 then
      CurrentUser()
    else if role = 2 then
      AdminUser();
  end
  else if CheckBox1.Checked = false then
  begin
    AllUsers();
  end;
end;

//------------------------------------------------------------------------------

procedure TForm2.AppMessage(var Msg: TMsg; var Handled: Boolean);
var
i: SmallInt;   
begin
  if Msg.message = WM_MOUSEWHEEL then
  begin
    Msg.message := WM_KEYDOWN;
    Msg.lParam := 0;
    i := HiWord(Msg.wParam);
    if i > 0 then
      Msg.wParam := VK_UP
    else
      Msg.wParam := VK_DOWN;
    Handled := False;
  end;
end;

//------------------------------------------------------------------------------

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Application.Terminate;
  Exit;
end;

//------------------------------------------------------------------------------

procedure TForm2.FormShow(Sender: TObject);
begin
  Form2.WindowState := wsMaximized;
  Application.OnMessage := Form2.AppMessage;
end;

//------------------------------------------------------------------------------

procedure TForm2.Button1Click(Sender: TObject);
begin
  //Form3.Visible := true;
  Form3.Show;
end;

//------------------------------------------------------------------------------

procedure TForm2.SpeedButton1Click(Sender: TObject);
var
  ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData : Variant;
  TemplateFile : String;
  BeginCol, BeginRow, i, j, t : Integer;
  RowCount, ColCount : Integer;
begin
  BeginCol := 1;
  BeginRow := 2;

  RowCount := DBGrid1.DataSource.DataSet.RecordCount;
  ColCount := DBGrid1.FieldCount;

  ExcelApp := CreateOleObject('Excel.Application');

  ExcelApp.Application.EnableEvents := false;

  Workbook := ExcelApp.WorkBooks.Open(ExtractFilePath(Application.ExeName) + 'Template\Template.xlsx');

  with DbGrid1.DataSource.DataSet do
  begin
    Last;
    First;
    ArrayData := VarArrayCreate([1, RecordCount, 1, Fields.Count], varVariant);

    for i:=1 to RecordCount do
    begin
      for j:=1 to Fields.Count do
        ArrayData[i,j] := Fields[j-1].AsVariant;
      Next;
    end;
  end;

  Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];

  Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow  + RowCount - 1, BeginCol + ColCount - 1];

  Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];

  Range.Value := ArrayData;

  ExcelApp.Visible := false;

  ExcelApp.WorkBooks[1].SaveAs(ExtractFilePath(Application.ExeName) + 'Âûãðóçêè\Ëåòàëüíûå ñëó÷àè.xlsx');
  ExcelApp.Quit;
end;

//------------------------------------------------------------------------------

procedure TForm2.DBGrid1ColEnter(Sender: TObject);
begin
with TDBGrid(Sender) do
   if Columns[SelectedIndex].ReadOnly
     then Options := Options - [dgEditing]
     else Options := Options + [dgEditing];
end;

//------------------------------------------------------------------------------

end.

...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083580
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ, Мимопроходящий, что-то не так? Если что я не профи и даже любителем Delphi сложно назваться. Просто появилась задача сделать небольшое десктопное приложение, вот сижу, делаю. Не сомневаюсь, что код кривой, но хотелось бы понять, где именно. Ну и главное решить проблему.
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083583
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну надо же было сперва хоть в букварь (Дельфийский) заглянуть!
а то сразу на коня и в бой...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083584
vdpmr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий, можно сразу обозначить о чем речь, чтобы я не гадал
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083585
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdpmrможно сразу обозначить о чем речь

Каталог Sources в Delphi содержит исходники в том числе TDBGrid, где и можно посмотреть
какие условия проверяются при переходе его в режим редактирования. Более того, в
отладочной сборке можно поставить там точку останова и посмотреть почему что-то не работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083587
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
vdpmrможно сразу обозначить о чем речь

Каталог Sources в Delphi содержит исходники в том числе TDBGrid, где и можно посмотреть
какие условия проверяются при переходе его в режим редактирования. Более того, в
отладочной сборке можно поставить там точку останова и посмотреть почему что-то не работает.Не уверен, что это ТС под силу
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083646
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdpmr
можно сразу обозначить о чем речь, чтобы я не гадал

Код: pascal
1.
2.
3.
4.
5.
6.
7.
if CheckBox1.Checked then begin
  case role of
    1: CurrentUser()
    2: AdminUser();
  end
end else
  AllUsers();
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083648
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
vdpmr
можно сразу обозначить о чем речь, чтобы я не гадал

Код: pascal
1.
2.
3.
4.
5.
6.
7.
if CheckBox1.Checked then begin
  case role of
    1: CurrentUser()
    2: AdminUser();
  end
end else
  AllUsers();


Код: pascal
1.
2.
3.
4.
5.
case Ord(CheckBox1.Checked) * role of
  1: CurrentUser;
  2: AdminUser;
  else AllUsers;
end;
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083656
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdpmr
в компоненте DBGrid св-во ReadOnly установлено в true

У компонета оно установлено, но у колонки - нет.
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083683
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Код: pascal
1.
2.
3.
4.
5.
case Ord(CheckBox1.Checked) * role of
  1: CurrentUser;
  2: AdminUser;
  else AllUsers;
end;

в топку! Нарушен KISS принцип))
...
Рейтинг: 0 / 0
DBGrid - определенные поля для чтения
    #40083715
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer

Код: pascal
1.
2.
3.
4.
5.
case Ord(CheckBox1.Checked) * role of
  1: CurrentUser;
  2: AdminUser;
  else AllUsers;
end;


И не жалко тебе собственную карму от тех, кто эти забубения потом будет поддерживать
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBGrid - определенные поля для чтения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]