Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2011, 16:26   #11
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
По умолчанию

Да - не просто так - они должны создаваться в базе данных - так должно быть !
Поэтому я и обратился за помощью. Как задать имя Столбцу в Базе данных ~.mdb ?
Apostol13 вне форума Ответить с цитированием
Старый 22.09.2011, 18:42   #12
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Слушай, а нормально описать задачу и проблему. Можно?
Потому что исходя из того что ты описываешь тебе надо временную таблицу.
Хотя временную ли. Ты не говоришь что должно произойти с этими столбцами после работы с ними.
Далее. Вполне может статься что ты не в том направлении движешься.
Может есть иной вариант решения твоей задачи.
Ну а вообще смотри в сторону create table с твоими нумерованными полями.
Во всяком случае я бы пошел таким путем.
Просто динамически собрал запрос на создание таблички. Создал её и открыл.
Но я еще раз говорю, что данное решение какое-то сложное.
И может просто не достаточно проработанное.
Скорее всего есть иные варианты решения.
Так что прошу нормально описать задачу.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 22.09.2011, 18:58   #13
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
По умолчанию

Есть 2 поля Edit1 и Edit2 (интервал допустим со значениями [1,3]), далее должно создаваться нечто следующее в самой базе данных(чтобы не писать ручками):
интервал 1-3.bmp

БД вполне существующая и рабочая, а столбцы сами создавались чтобы ручками не вбивать их названия, просто их может быть до 150 штук и они после того как создадутся будут заполнены значениями.
Используемые компоненты: DataSourse, AdoTable, AdoConnector, StringGrid для вывода БД с нашими столбцами (компоненты сообщаются между собой и их active:=True).

Заранее Благодарен всем участникам и извините если создал проблемы кому то. С Уважением, Алексей.

Последний раз редактировалось Apostol13; 22.09.2011 в 19:02.
Apostol13 вне форума Ответить с цитированием
Старый 22.09.2011, 19:31   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

rdama +1

Apostol13
1) не понимаю "бизнес-логику" добавления столбцов в рабочем режиме!
Но я уверен, что это или плохо продуманная структура БД (в 98% случаев)
или (1% случаев) задача не попадает в рамки реляционных БД.


2) Почему нельзя добавить необходимые столбцы заранее, на этапе проектирования ПО ?

3) добавлять столбцы во время работы программы, имхо, можно.
Но делать это нужно совсем не так, как это пытаетесь делать Вы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2011, 19:31   #15
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Как я понимаю у тебя часть таблицы уже есть.
Или таблица пересоздается с изнова при каждом запуске программы?
Тогда тебе нужна модификация таблицы.
В кратце что то подобное
Код:
alter table имя_таблицы add column имя_колонки тип_колонки(размер)
Но может пересмотреть структуру таблиц?
Первые поля (Стойки, Всего) они постоянны?
И значения в них тоже постоянны?
Тогда может пойти по другому пути.
Пусть первые поля станут неким справочником.
А твои расчетные данные станут просто записями в другой таблице. Не столбцами, а записями.
Но для этого надо понять, что же ты пишешь. Что возникла необходимость в 150+ полях.
Я думаю надо пересмотреть структуру БД.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 22.09.2011, 20:56   #16
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Похоже у вас база с "динамической" структурой. Лучшее что приходит в голову как уже говорилось :
Цитата:
Сообщение от rdama Посмотреть сообщение
Но может пересмотреть структуру таблиц?
Цитата:
Сообщение от rdama Посмотреть сообщение
Тогда может пойти по другому пути.
Пусть первые поля станут неким справочником.
А твои расчетные данные станут просто записями в другой таблице. Не столбцами, а записями.
Я думаю надо пересмотреть структуру БД.
Т.е. создается таблица вида
1. IDFIELDNAMES
2. NAMEofVirtualField

и другая :
1. IDFIELDVALUES
2. VirtualFIELDID
3. FIELDVALUE

после объединяющего запроса из обоих таблиц будет получено что-то вроде:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
IDFIELDVALUES | VirtualFIELDID | NAMEofVirtualField | FIELDVALUE |
1 | 32 | 1-1 | зеленые |
2 | 12 | 2-2 | круглые |
3 | 28 | 3-3 | L2кэш-1мб |
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
т.е. в такую таблицу, вернее в две можно напихать всякой разной инфы, правда будут проблемы с хранением различных типов данных.
Кроме того определенные сложности с отображением, т.к. надо транспонировать. Хотя раз уже используется StringGrid - то это можно сделать.
Кстати вообще за каким ... использован StringGrid ??? Шоб жизнь сахером не казалась???

Да и еще один вариант - чисто косметический, если уже всё работает и данные забиваются:
переименовать визуальную сторону - т.е. DisplayLabel, все равно при используемой "динамической" структуре идет обращение по индексу/номеру поля, т.е. коду всё равно а глазу пользователя приятно.

Вообще странно всё это. Чтоб не было такой ..., и неправильных вопросов, неправильных баз, неправильных пчел и далее по списку, надо читать книги, например есть "Проектирование БД в Дельфи" Гофман и Хомоненко, пару лет моя настольная/накроватная/околоунитазная книга.
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 22.09.2011, 21:34   #17
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Ну вот, пока я ужинал, меня опередили с предложением варианта хранения.
Ну да ладно. Я тоже самое хотел предложить.
Но я думаю что в данном случае для полноценного хранения данных надо рассматривать некий идентификатор т.е. 3 параметр.
Ну это только если в программе предполагается хранить весь этот набор параметров. Которых аж 150+.
Т.к. иначе не возможно будет идентифицировать от какого расчета у нас те или иные значения.
Но опять же в данном случае это гадание на кофейной гуще.
Описание задачи крайне необходимо. Ну и мы тут все можем по очереди посмотреть структуру и подсказать, что поправить, а как не делать.
Но путь с динамическим созданием полей заведомо не верный.
Т.к. если есть объект то у него должно быть фиксированное количество свойств.
А иначе получается что это нечто крайне абстрактное с неограниченным количеством свойств.
И для этого не обязательно читать книгу по проектированию БД в Delphi.
На самом деле ужас, а не название. Т.к. в Delphi БД не проектируется, а на существующую БД рисуется оболочка. Так сказать система управления БД.
А для того чтоб таких вопросов не было. Надо взять любой учебник по ООП. И прочитать первые несколько страниц чтоб понять что такое объекты и как их надо выделять и разделять.
И заодно прочитать книгу по теории реляционных БД. Ну и задавать вопросы.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 23.09.2011, 07:05   #18
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
По умолчанию

Смысл существования БД такой:
Существуют различные[монтажные] стойки (К1153, К1152 и т.д.).
И существуют отрезки "1 - 1", "2 - 2" и т.д. Где они размещаются, т.е которые я хотел пихать в столбцы.

Ныне поменял столбцы и строки местами чтобы в запись добавлялся отрезок допустим "1 - 1" (и в нем будет какое то количество всех различные стоек, полок, крепежей и т.д.) а за ним и все остальные по мере надобности. - дело весьма упростилось.

Но нельзя присвоить имена столбцов ячейкам = (

Код:
procedure TForm1.SpeedButton7Click(Sender: TObject);
var i, n: byte;
begin
  i:=1;
  n:=1;
  AdoTable1.First;
  while not AdoTable1.Eof do
      begin
        StringGrid1.Cells[0,i]:=AdoTable1.Fields.Fields[n].FieldName;
        i:=i+1;
        n:=n+1;
// тут пробовал писать ограничение i и n но толку не дало
      end;
вот какая ошибка возникает:
Ошибка.jpg

Последний раз редактировалось Apostol13; 23.09.2011 в 08:05.
Apostol13 вне форума Ответить с цитированием
Старый 23.09.2011, 10:13   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ныне поменял столбцы и строки местами чтобы в запись добавлялся отрезок допустим "1 - 1" (и в нем будет какое то количество всех различные стоек, полок, крепежей и т.д.) а за ним и все остальные по мере надобности. - дело весьма упростилось.
давно пора!
вот именно это Вам две страницы и пытались втолковать!

Цитата:
Но нельзя присвоить имена столбцов ячейкам = (
если я правильно Вас понял достаточно написать так:
Код:
var i : byte;
begin
  if Not ADOTable1.Active then ADOTable1.Open;

  StringGrid1.FixedRows := 1;  // выделим первую строку грида под заголовки столбцов
  StringGrid1.ColCount := AdoTable1.Fields.Count + 1; // зададим размер грида, чтобы все столбцы вместились

  // а вот и цикл по "озаглавливанию" столбцов грида
  for i:=0 to AdoTable1.Fields.Count-1 do
     StringGrid1.Cells[i+1, 0] := AdoTable1.Fields.Fields[i].FieldName ;

p.s. совет. Для отображения данных много лучше использовать DBWare компоненты. Например, DBGrid (а ещё можно воспользоваться продвинутым компонентом Ehlib и взять оттуда TDBGridEh ).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.09.2011, 15:42   #20
Apostol13
Пользователь
 
Регистрация: 02.06.2011
Сообщений: 31
По умолчанию

В общем и там у меня выскакивала ошибка все та же.

Но вот что меня беспокоит больше:
1) Как сделать в DBGrid аналог StringGrid`а - с "FixedRows" и "FixedCol" ?
2) Как Сделать так, чтобы нельзя было редактировать \ Удалить первую строку в DBGrid?
Пока для Удаления использую:
Код:
if not DBGrid1.DataSource.DataSet.Eof then
       DBGrid1.DataSource.DataSet.Delete;
3) Как обратиться к конкретной ячейке, например из 3 столбца второй строки?

Последний раз редактировалось Apostol13; 24.09.2011 в 12:59.
Apostol13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не копируется MDB файл через CopyFile artemavd Общие вопросы Delphi 4 02.12.2010 08:44
Обращение к элементам массива через указатель Miha85193 Общие вопросы Delphi 21 19.07.2010 18:43
Обращение к переменной через другую переменную tae1980 Microsoft Office Excel 2 22.03.2010 00:52
Обращение через TComponent Marsel737 Общие вопросы Delphi 6 08.12.2009 21:54
Обращение к элементам массива через указатель в С++ серг Помощь студентам 1 24.11.2009 01:30