Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
#1

Добавление колонок

20.01.2010, 08:46. Просмотров 1250. Ответов 17
Метки нет (Все метки)

У меня есть таблица с 3 полями(колонками). Мне надо динамически,т.е. кодом, добавить колонку в базу данных, но при добавлении записи в предыдущих стираются .Вижу 2 варианта:
1. Добавить колонку, но что бы старые записи сохранились.
2. Скинуть записи в буфер, а после добавления колонки заново их записать.
Использую связь Table->DataSource->DBGrid.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2010, 08:46
Ответы с готовыми решениями:

Добавление колонок в таблицу БД
Имеется c++ builder 6 и таблица paradox 7. Нужно удалять и добавлять столбцы у...

Сравнение колонок в TStringGrid
Доброго времени суток. Программа считывает два excel файла в стринггриды, надо...

Последовательность колонок и их размер
Когда запускаю приложение я меняю местами колонки и их размер в DBGrid, но...

Изменение колонок DBGrid
Добрый день. Подскажите, колонки в DBGrid выводятся с именами полей из базы...

Ширина колонок в DBGrid
Здравствуйте! Возникла проблема с DBGrid, а именно то, что при открытии формы...

17
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
20.01.2010, 09:08 #2
FroL, а ну-ка покажи, как ты добавляешь?
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
20.01.2010, 09:12  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{     
 Form1->Table3->Active = false;
 TFieldDef *pNewDef = Form1->Table3->FieldDefs->AddFieldDef();
 AnsiString nam = "Z" + Form1->Table1->FieldByName("№")->AsString;
 pNewDef->Name = nam;
 pNewDef->DataType = ftString;
 pNewDef->Size = 50;
 Form1->Table3->CreateTable();
 Form1->Table3->Open();
 Form1->Table3->Insert();
 Form1->Table3->First();
 TField* field = Form1->Table3->FindField(nam);
 for(int i = 0; i <= k; i++)
  {
    if(op[i] != "")
    {
     Form1->Table3->Append();
     field->AsString = op[i];
    }
  }   
 Form1->Table3->Post();
 Form2->Close(); 
}
0
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
20.01.2010, 09:35 #4
FroL, ты решил впихнуть в код все методы класса TTable? 10-11 - переводить таблицу в режим добавления и устанавливать указатель на первую запись совсем не нужно... 17 - это уже точно лишнее, да и field лишнее, можно через fieldbyname все организовать... а еще у меня возникает вопрос - таблица создается постоянно?
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
20.01.2010, 09:38  [ТС] #5
нет. Я взял это с Архангельского. Этот код рабочий, только Table->CreateTable стирает все записи. А без нее не добавляется колонка.
0
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
20.01.2010, 09:45 #6
FroL, так Архангельского в таком случае я читать не буду, потому что либо ты что-то путаешь и наговариваешь на человека, либо мне такие советы и даром не нужны... а на счет того, что данные исчезают, я могу тебе объяснить - ты постоянно пересоздаешь таблицу и заливаешь данные... таблицу по-хорошему надо создавать, когда ее нет, т.е. хотя бы проверку бы впихнул...
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
20.01.2010, 16:59  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
 Form1->Table3->First();
 
 for(int i = 0; i <= k; i++)
  {
    if(op[i] != "")
    {
     Form1->Table3->Append();
     field->AsString = op[i];
    }
  }
Это я прикрутил.У него такого нет. Кстати книжка хорошая. А как же мне тогда сохранить добавленную колонку?

Добавлено через 7 часов 10 минут
Очень надо.А может скинуть всю таблицу в буфер или в другую таблицу ,добавить колонку и скопировать обратно? Только как это сделать?
0
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
20.01.2010, 17:08 #8
FroL, чтобы редактировать структуру таблицы используйте запрос alter table
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
20.01.2010, 17:11  [ТС] #9
А это как?
0
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
20.01.2010, 17:19 #10
FroL, вы не знакомы с sql?
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
20.01.2010, 18:05  [ТС] #11
Нет.А подскажи литературу по SQL.
0
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
21.01.2010, 00:00 #12
найдите папку с установленной BDE, там есть файлик localsql.hlp - для начала хватит
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
21.01.2010, 12:06  [ТС] #13
Большое спасибо.
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
17.02.2010, 16:30  [ТС] #14
воспользовался Alter Table:
C++
1
2
3
Form1->Query1->Close();
Form1->Query1->SQL->Strings[0] = "Alter Table Fale Add Z106 CHAR(100)";
Form1->Query1->ExecSQL();
Все отлично добавлялось.Но снес винду, была Vista поставил Seven. И при добавлении прога стала зависать.Это из-зи винды?
0
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
17.02.2010, 16:56 #15
FroL, ну если из всего, что связано с прогой, поменялась только винда, то очень может быть
0
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
20.02.2010, 17:52  [ТС] #16
Создал новое приложение, там все нормально работает.В исходной проге отключил все функции, кроме этой, но не помогло. А можно ли пересобрать приложение, что бы ненужные компоненты удалились?

Добавлено через 21 час 35 минут
Все спасибо разобрался. Не хочу плодить темы поэтому спрошу здесь. Есть запись и надо переместиться к соседней колонке, т.е. вертикально. Как это сделать?
0
Lord_Voodoo
Супер-модератор
8609 / 2235 / 133
Регистрация: 07.03.2007
Сообщений: 10,820
Завершенные тесты: 1
21.02.2010, 11:51 #17
FroL, в источнике данных просто выполнить метод Prior
1
FroL
61 / 49 / 6
Регистрация: 07.01.2010
Сообщений: 307
21.02.2010, 12:00  [ТС] #18
Блин люпус.Я описался.Мне надо переместится горизонтально.Я сделал это через вызов сигнала OnKeyPress для клавиши Tab.
0
21.02.2010, 12:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2010, 12:00

Как сохранить название колонок?
Ребята как можно сохранить изменившые название колонок, Я написал прогу где...

StringGrid динамическая ширина колонок
День добрый! Скажите, можно ли как-то установить, чтобы ширина столбцов...

Обработка отдельных колонок в StrinGrid
Ребят, а можно ли в StringGrid запретить в определенных колонках ввод символов...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru