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

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

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

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

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

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

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

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



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

И что грид не даёт их редактировать ?
...
Рейтинг: 0 / 0
13.07.2021, 13:06
    #40083557
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
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
13.07.2021, 13:10
    #40083558
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
Код: 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
13.07.2021, 13:12
    #40083559
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
...
Рейтинг: 0 / 0
13.07.2021, 13:19
    #40083561
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
А есть ешё http://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.DBGrids.TColumn.ReadOnly
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.07.2021, 13:26
    #40083562
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
ъъъъъDBGrid1.DataSource.DataSet.Fields[1].ReadOnly := true;



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

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

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

Меняю "шило на мыло". Что я делаю не так ?
...
Рейтинг: 0 / 0
13.07.2021, 13:58
    #40083576
vdpmr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
ъъъъъ, в компоненте 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
13.07.2021, 14:13
    #40083580
vdpmr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
ъъъъъ, Мимопроходящий, что-то не так? Если что я не профи и даже любителем Delphi сложно назваться. Просто появилась задача сделать небольшое десктопное приложение, вот сижу, делаю. Не сомневаюсь, что код кривой, но хотелось бы понять, где именно. Ну и главное решить проблему.
...
Рейтинг: 0 / 0
13.07.2021, 14:27
    #40083583
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
ну надо же было сперва хоть в букварь (Дельфийский) заглянуть!
а то сразу на коня и в бой...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.07.2021, 14:29
    #40083584
vdpmr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
Мимопроходящий, можно сразу обозначить о чем речь, чтобы я не гадал
...
Рейтинг: 0 / 0
13.07.2021, 14:32
    #40083585
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
vdpmrможно сразу обозначить о чем речь

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

Каталог Sources в Delphi содержит исходники в том числе TDBGrid, где и можно посмотреть
какие условия проверяются при переходе его в режим редактирования. Более того, в
отладочной сборке можно поставить там точку останова и посмотреть почему что-то не работает.Не уверен, что это ТС под силу
...
Рейтинг: 0 / 0
13.07.2021, 19:35
    #40083646
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid - определенные поля для чтения
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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DBGrid - определенные поля для чтения / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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