14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
||||||
1 | ||||||
Как изменить размер существующего поля таблицы ACCESS?02.02.2013, 19:50. Показов 8726. Ответов 75
Метки нет (Все метки)
0
|
02.02.2013, 19:50 | |
Ответы с готовыми решениями:
75
Как изменить размер TImage под текущий размер Picture ? Экспорт из Access в FoxPro. Как изменить формат поля таблицы? Изменить размер поля таблицы присоединенной БД Как изменить размер поля ввода? |
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 21:03 [ТС] | 41 |
Ну тогда не знаю! По-разному, что-ли в разных дельфях?! У меня после селекта все колонки принимают ширину соответствующего поля.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
03.02.2013, 21:05 | 42 |
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 21:23 [ТС] | 43 |
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
03.02.2013, 21:28 | 44 |
Можешь проект выложить - посмотрим.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
03.02.2013, 21:37 | 45 |
1. Не создавай колонки грида явно в дизайн-тайм.
2. Создай явно в дизайн-тайм все необходимые объекты-поля в редакторе полей объекта, который будет использован для SELECT-запроса, у каждого из созданных объектов-полей установи нужные значения св-в FieldName, DisplayLabel и DisplayWidth Добавлено через 1 минуту 3. Включи наконец мозг и пойми что в учебнике все это описано гораздо подробнее и понятнее-нагляднее.
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 21:43 [ТС] | 46 |
С удовольствием выкладываю. Только тут надо будет понажимать не педали. Надо ткнуть в пункт меню "mdb", загрузить, к примеру, "687263001.mdb". Далее - даблкликать по элементам поля "Components" - выскочит ещё один ДБгрид, в котором будут добавляться колонки по каждому даблклику. Далее надо будет заполнять таблицу. Но до этого дело не доходит. Когда добавляется колонка, она имеет вполне кошерную ширину. Как только добавляю следующую, предыдущая принимает ширину 100, точнёхонько по ширине соответствующего поля ADOQuery2. Просиходит это в результате селекта.
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
||||||
03.02.2013, 22:04 | 47 | |||||
Подправь:
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 22:12 [ТС] | 48 |
То есть, сделать все поля по 10?! Это не то! Это я могу прекрасно сделать и при создании поля. Создавать шириной не 100, а 10, только и всего. Или я что-то недопонял?
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
03.02.2013, 22:19 | 49 |
Это просто пример того, как установить нужный размер поля не трогая базу.
В этом месте можно, например, добавить поиск максимального значения элемента поля и выставить ширину по нему.
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 22:22 [ТС] | 50 |
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
03.02.2013, 22:30 | 51 |
К примеру,
Шумаков П.В, В.Фаронов "Руководство разработчика баз данных Delphi 5" В.Фаронов "Программирование баз данных в Delphi 7 (учебный курс)"
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 22:33 [ТС] | 52 |
Про это я писал. Нет проблемы - написать свою процедуру подгонки ширины колонок. Вариантов тьма. Можно колонки грида менять, можно поля таблицы. Потом тупо и нудно вызывать эту процедуру каждый раз после каждого запроса. Если нет другого выхода, придётся сделать так. Но, повторюсь - это, на мой взгляд, дурно пахнет. Это именно "тупо и нудно"! Если только так можно заставить эти гриды и эти адоквери давать требуемый результат, то какое же всё это ДЕРЬМО! (Пардон, вырвалось. Будем считать, что я этого не говорил.)
0
|
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
|
|
03.02.2013, 22:44 | 53 |
Ну если реализуешь это как-то умнО и весело, то дай знать.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
03.02.2013, 22:47 | 54 |
Ты пойми одну простую вешь - пользователь вправе и должен сам устанавливать атрибуты визуализации колонок грида (ширина, порядок следования и т.д.)
Твое дело - не навязывать ему свои представления о том как это должно выглядеть, а предоставить ему минимально необходимый и удобный инструментарий для того чтобы он мог установить при запуске (и автоматически восстановить при перезапуске) свои предпочтения.
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 22:59 [ТС] | 55 |
Слишком учёно для моих мозгов. Ты лучше скажи - возможно установить ширину колонок по ширине данных так, чтобы после каждого запроса не выставлять заново? Ведь мне там надо бы и сортировку сделать, и кое-что ещё. И всё это надо через запросы. Или оставить надежду, и восстанавливать каждый раз? Плевать, что коряво внутри, лишь бы работало снаружи? Как-то так?
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
03.02.2013, 23:10 | 56 |
Пример (не для подражания - не обезъянничать тупо !) как можно сохранять и восстанавливать ширину и порядок следования колонок в DBGrid и ValueListEditor (оба наследники TCustomGrid):
Код
// сохранение в контексте события TDataSet.BeforeClose procedure SaveGridColumnsLayout(Grid: TCustomGrid; IniFile: TIniFile); var Owner: TComponent; i: Integer; slw, slo: TStringList; s: AnsiString; NeedOpenFile: Boolean; begin s := Grid.Name; Owner := Grid.Owner; while Assigned(Owner) and not (Owner is TForm) do Owner := Owner.Owner; if Assigned(Owner) then s := Format('%s.%s', [Owner.Name, s]); NeedOpenFile := not Assigned(IniFile); if NeedOpenFile then IniFile := TIniFile.Create(frmSetup.IniFileName); slw := TStringList.Create; slo := TStringList.Create; try slw.Delimiter := ','; slo.Delimiter := ','; if Grid is TDBGrid then for i := 0 to TDBGrid(Grid).Columns.Count - 1 do begin slo.Add(TDBGrid(Grid).Columns[i].FieldName); slw.Add(IntToStr(TDBGrid(Grid).Columns[i].Width)); end else if Grid is TValueListEditor then for i := 0 to TValueListEditor(Grid).TitleCaptions.Count - 1 do begin slo.Add(TValueListEditor(Grid).TitleCaptions[i]); slw.Add(IntToStr(TValueListEditor(Grid).ColWidths[i])); end else Exit; IniFile.WriteString('ControlsAdjustment', Format('%s.ColumnsOrder', [s]), slo.DelimitedText); IniFile.WriteString('ControlsAdjustment', Format('%s.ColumnsWidth', [s]), slw.DelimitedText); finally slw.Free; slo.Free; if NeedOpenFile then IniFile.Free; end; end; // восстановление в контексте события TDataSet.AfterOpen procedure RestoreGridColumnsLayout(Grid: TCustomGrid; IniFile: TIniFile); var Owner: TComponent; i,k,w: Integer; slw, slo: TStringList; s: AnsiString; NeedOpenFile: Boolean; begin s := Grid.Name; Owner := Grid.Owner; while Assigned(Owner) and not (Owner is TForm) do Owner := Owner.Owner; if Assigned(Owner) then s := Format('%s.%s', [Owner.Name, s]); NeedOpenFile := not Assigned(IniFile); if NeedOpenFile then IniFile := TIniFile.Create(frmSetup.IniFileName); slw := TStringList.Create; slo := TStringList.Create; try slw.Delimiter := ','; slo.Delimiter := ','; slo.DelimitedText := IniFile.ReadString('ControlsAdjustment', Format('%s.ColumnsOrder', [s]), ''); slw.DelimitedText := IniFile.ReadString('ControlsAdjustment', Format('%s.ColumnsWidth', [s]), ''); if Grid is TDBGrid then begin for k := 0 to slo.Count - 1 do for i := 0 to TDBGrid(Grid).Columns.Count - 1 do if AnsiCompareText(TDBGrid(Grid).Columns[i].FieldName, slo[k]) = 0 then begin try TDBGrid(Grid).Columns[i].Index := k; except end; Break; end; for k := 0 to slw.Count - 1 do if TryStrToInt(slw[k], w) then try TDBGrid(Grid).Columns[k].Width := w; except end; end else if Grid is TValueListEditor then begin for k := 0 to slw.Count - 1 do if TryStrToInt(slw[k], w) then try TValueListEditor(Grid).ColWidths[k] := w; except end; end else Exit; finally slw.Free; slo.Free; if NeedOpenFile then IniFile.Free; end; end; Фрагмент создаваемого при сохранении файла настроек: [ControlsAdjustment] frmMain.gridJournal.ColumnsOrder=Date,Time,Channel,RegNumber,Access frmMain.gridJournal.ColumnsWidth=125,92,70,114,35
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 23:19 [ТС] | 57 |
Ну вот. Что и требовалось доказать. Без кучи вложенных сложносочинённых циклов не обойтись. Это типа как купить машину. Тачка-то классная, но едет только боком. Чтобы ехала прямо, надо кней плуг от трактора приделать резинкой от трусов. Вонзить ентот плух в асфальт и он не даст ей повернуться боком, только мордой вперёд. Ну да, ну чуток дизайн подпортит. Ну скорость маленько упадёт. Зато же ехать можно будет. Вот это АДО, на мой взгляд, и есть такая замечательная тачка. Аминь.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
03.02.2013, 23:25 | 58 |
Сведения о ширине актуальных данных в некоем поле набора данных, возврааемого в результате SELECT-запроса, становятся доступными не ранее возникновения события AfterOpen.
До этого момента никаких предположений о ширине соответствующей полю будущей колонки грида сделать попросту невозможно. Добавлено через 6 минут Причем здесь ADO ? Такую инф-цию тебе не выдаст "по мановению волшебной палки" ни один иной программно-технологический СУБД-механизм общего назначения.
0
|
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
|
|
03.02.2013, 23:31 [ТС] | 59 |
Ну ладно. Значит, если я правильно понял, вердикт такой: восстанавливать столбы после каждого запроса и никак не иначе?
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
04.02.2013, 09:09 | 60 |
Верно.
0
|
04.02.2013, 09:09 | |
04.02.2013, 09:09 | |
Помогаю со студенческими работами здесь
60
Как изменить размер поля через vba? Размер ячеек таблицы - как изменить ? Как в А2000 поле размер числового поля таблицы сделать.... Как изменить размер изображения, вставленного в ячейку таблицы MS Word? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |