Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
1

Как изменить размер существующего поля таблицы ACCESS?

02.02.2013, 19:50. Показов 8729. Ответов 75
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Delphi
1
2
3
4
5
6
7
  With ADOQuery2 do
  begin
    Close;
    SQL.Clear;
    SQL.Text :='ALTER TABLE properconnections ALTER COLUMN D15 TEXT (30)';
    ExecSQL;
  end;
Ошибка "Access violation".
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2013, 19:50
Ответы с готовыми решениями:

Как изменить размер TImage под текущий размер Picture ?
Доброго времени суток! Есть задача (Delphi 7). В TImage загружается Picture с условиями: Center...

Экспорт из Access в FoxPro. Как изменить формат поля таблицы?
Сохраняю таблицу из MS Access 97 во внешнем файле формата Microsoft FoxPro 2.0 (dbf). При этом...

Изменить размер поля таблицы присоединенной БД
Добрый день, нужно изменить структуру разделенной БД из клиентской, запрос CurrentDb.Execute...

Как изменить размер поля ввода?
нужно чтобы они были уже

75
Заблокирован
05.02.2013, 11:57 61
Author24 — интернет-сервис помощи студентам
Злобный Зайц,
Ошибаетесь. АДО Это и есть плуг, чтобы "тачки" разных марок (базы данных) ехали бы синхронно в одном направлении. Это и есть набор сложносочинённо-подчинённых циклов, чтобы лентяи не писали их сами.
0
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
05.02.2013, 12:09  [ТС] 62
Если это такая хорошая и по-умному сделанная вещь, то научите, как без дополнительных самодельных примочек сделать автосайзинг полей?
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.02.2013, 12:12 63
Дай четкое определение своему выражению "автосайзинг полей" ..
0
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
05.02.2013, 12:34  [ТС] 64
Ох, грехи мои тяжкие!
Начинаю всё сначала.
Поля заполняются строками. Строки могут иметь разную длину. Какую именно - заранее неизвестно. Нужно, чтобы каждый столб имел минимальную ширину, достаточную при этом для отображения самой длинной строки в данном столбе.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.02.2013, 12:44 65
А ты вообще осознаешь что "ширина столба" напрямую зависит от фонта (и его параметров), которым грид рисует столб ?
Ты понимаешь что фонт грида никаким боком не касается источника данных, коим может быть и ADO и не ADO ?
Ты понимаешь что смена фонта и/или его свойств уже ПОСЛЕ отображения гридом "столба" некоей ширины отправляет весь твой "авторесайзинг" коту под хвост ?
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
05.02.2013, 13:13 66
Если так хочется, то вот код минимизации ширины столбцов Грида:
Уменьшить ширину столбца грида соответственно длине строки текста в нем
Если разберешься...
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.02.2013, 13:26 67
Цитата Сообщение от gorfil Посмотреть сообщение
от код минимизации ширины
Да не хочет же ТС никакие "костыли" подставлять)

Он наивно полагает что АДО каким-то волшебным образом сам и безо всяких дополнительных телодвижений со стороны прикладного программера может управлять визуализацией в дельфийском гриде в части установки ширины колонок)
0
Заблокирован
05.02.2013, 14:25 68
mss,
Дело в том. что для работы с ACCESS можно писать макросы. Обычно их пишут в VS на бейсике. Там да. Там можно менять размеры полей и запоминаить их размеры. Можно состряпать автоматические измение ширины колонки по ширине самой длинной строки. Можно так же писать не макросы а приложения. Но при этом сама таблица, это уже готовый обьект, внедряемый в форму которым можно управлять черз функции SDK. Я писал такие штуки, правда для Excel. В ACCESS есть свой управляемый через SDK таблицопостроитель. Видимо речь идёт именно о SDK. Можно даже попросту найти ActiveX и работать с ним не заморачиваясь на инициализацию и прочее.
Именно SDK это те самые "волшебные кнопочки." Правда в нём тоже без сложно-сочинённо-подчинённых конструкций не обойтись. А ADO тут вообще не причём.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.02.2013, 14:38 69
Цитата Сообщение от Lirrk Посмотреть сообщение
самой длинной строки
Это ключевая фраза.
Не важно какими средствами, но для ее поиска так или иначе, теми или иными средствами, на той или иной стороне - клиентской или серверной - требуется пробежать по всему набору данных.
Никакой святой дух этого не сделает)
Даже дух, живущий в MS Excel Application, - и тот ждет от юзера даблклика на границе заголовка столбца как команды для начала расчета минимально необходимой его ширины.
0
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
05.02.2013, 18:04  [ТС] 70
Как я устал молотить тут одно и то же! Извини, но, правда же, я уже не знаю, сколько раз повторил.
Делаю последний попытк.
Итак.
1. Создаю в таблице "ProperConnections" нужные поля:
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.ADDColumn(FieldName:string);
var len:string; c:Integer;
begin
  len:=IntToStr(Length(col));
  try
  SQLExec2('ALTER TABLE ProperConnections ADD '+FieldName+' text(100)');
    except on e:Exception do;
  end;
end;
2. Меняю ширину поля как мне над
Delphi
1
    ADOQuery2.Fields[ADOQuery2.FieldCount-1].DisplayWidth:=Length(FieldName);
До этих пор всё работает как задумано. Колонка получается нужной ширины.

3. Делаю любой SELECT из этой таблицы. ADOQuery2.Fields[ADOQuery2.FieldCount-1].DisplayWidth принимает значение 100, как было задано при создании столба (см. пункт 1.) Соответственно, колонка грида становится шириной 100. Бесполезно менять свойство DisplayWidth. Оно сбрасывается в дефолт, который определяется размером поля при рождении поля таблицы.
4.
Delphi
1
2
SQLExec2('ALTER TABLE properconnections ALTER COLUMN '+
            DBGrid2.Fields[i].FieldName+' TEXT ('+IntToStr(Length(line))+')');
Таким способом тоже ничерта не получается. Я это описывал с самого начала этой трагической эпопеи.
0
Заблокирован
05.02.2013, 19:02 71
Злобный Зайц,
Да очень просто. Задаёшь динамический массив по количеству полей. В нём хранишь текущую ширину каждого поля. После всех манипуляций, селектов и так далее перерисовывать таблицу с данными из массива. Это так сказать "решение в лоб".
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.02.2013, 20:15 72
ему про фому - он все про своего ерему)
ппц до чего ты дуб.
0
14 / 14 / 1
Регистрация: 21.10.2010
Сообщений: 462
05.02.2013, 22:34  [ТС] 73
Ну, то, что я дуб, это дело понятное. Но про фому-то это я всё время, а мне всё про массивы, да про вложенные циклы. С этим я и сам прекрасно справлюсь, тоже мне, проблема. Вопрос про то, как сделать без лишнего гемороя. На чёрта мне тогда сдались эти БД, если к ним ещё такие примочни надо сбоку лепить. Я бы прекрасно и в стринггридах мог бы всё сделать без всяких там акцессов и АДО, если всё равно, всю черновую работу самому делать надо. Да оно и сделано уже и даже работает. Только умные люди посмотрели на всё это и сказали, что подо всё это есть готовый инструментарий, и можно всё то же самое сделать, не напрягаясь, в пол-пинка. Вот я и решил попробовать. А оказалось, что иногда легче всё с нуля самому сделать, чем пользоваться чем-то готовым, с двойным дном, где на каждом шагу грабли заботливо разложены.

В общем, считаем, что тема закрыта. А то тут уже скоро дело до поножовщины дойдёт.
0
Заблокирован
05.02.2013, 23:56 74
Злобный Зайц,
Золотые слова. Лучше самому и с нуля.
Кстати. я прошерстил пару форумов. там написано то же что сказал я. Только запоминать и перерисовывать.
А что до поножовщины, так это верно. скоро сюда толпа админов и модеров с ножами придут и будут резать.
преемущественно меня.
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
06.02.2013, 11:50 75
Цитата Сообщение от Злобный Зайц Посмотреть сообщение
На чёрта мне тогда сдались эти БД
Теперь мне тоже стало интересно - начерта тебе эти БиДэ ?
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
06.02.2013, 17:39 76
Во общем можно еще таким способом сделать размер.
Делаешь запрос к своей базе
Delphi
1
2
3
4
5
 with ADOQuery1 do
       begin
         SQL.Text := 'SELECT Поле1,  Поле2, Поле3  FROM Таблица';
         open;
     end;
Делаешь сразу еще один запрос (Или прописать его AfterOpen в ADOQuery1 )
Delphi
1
2
3
4
5
6
7
with ADOQuery2 do
    begin
      SQL.Text := 'SELECT Max(Len([Поле1])), Max(Len([Поле2])), Max(Len([Поле3]))  FROM Таблица';
      open;
      for I := 0 to FieldCount - 1 do
      ADOQuery1.Fields.Fields[i].DisplayWidth:= Fields.Fields[i].AsInteger;
  end;
0
06.02.2013, 17:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2013, 17:39
Помогаю со студенческими работами здесь

Как изменить размер поля через vba?
Нужно установить размер поля с меньшего размера на больший Не могу понять, как можно изменить...

Размер ячеек таблицы - как изменить ?
Доброго времени! Такая проблемка: есть таблица со свойством table-layout: fixed; это свойство...

Как в А2000 поле размер числового поля таблицы сделать....
Вопрос уже задавал, но возможно не внятно сформулировал. Как в А2000 длину числового поля...

Как изменить размер изображения, вставленного в ячейку таблицы MS Word?
Формирую таблицу с картинками в MS Word из 1С по технологии COM. Столкнулся с тем, что картинка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
76
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru