Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Изменить размер поля в Access


Автор: Perun 15.2.2008, 22:43
Доброго времени суток всем.
Поделитесь опытом, задача несложная.
Имеется БД в Access, нужно увеличить размер текстового поля программно, подключившись к базе
Я пробовал через ADO, получаю доступ к базе, к полю, меняю размер с 50 до 200...
Если не заремить Open() и  Close(), то получается ошибка
Открываю БД в Access - размер поля остался прежним. Как сохранить результат? 

//ADOTable->Open();
if(SizeV->Text != "")
  {
   ADOTable->Fields->FieldByName("НаимОрг")->Size = SizeV->Text.ToInt();
   ADOTable->SetFields(V,200);
  }
else
  ShowMessage("Укажите новый размер поля!");
//ADOTable->Close();

SizeV - TEdit, из которого берётся размер поля(для примера)

Автор: volvo877 16.2.2008, 17:56
SQL-запрос вида
Код
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add("ALTER TABLE название_таблицы ALTER COLUMN название_поля TEXT("
    + SizeV->Text + ")");
  ADOQuery1->ExecSQL();
не проходит?

Автор: Perun 16.2.2008, 23:15
Спасибо, я тоже об этом подумал, сейчас поробуем!
О результате сообщу.

Автор: Perun 17.2.2008, 00:12
Всё работает - спасибо, а через ADOTable как вариант можно было сделать? 

Автор: Perun 17.2.2008, 15:21
проблема в пробелах: если у объекта есть пробел говорит, что ошибка синтаксиса инструкции ALTER.
попробовал копию таблицы  без пробела(надо 2 поля увеличить) 1 проходит, 2:
ошибка синтаксиса инструкции ALTER?
void __fastcall TForm1::ChangeSizeClick(TObject *Sender)
{
ADOTable1->Open();
    ADOQuery2->SQL->Clear();
    AnsiString s = "ALTER TABLE tbl_Клиенты ALTER COLUMN НаимОрг TEXT(200)",
               fn = "tbl_База_заключений", ser = "Сертификат", Nexp = "Номер эспертизы",
               str = "ALTER TABLE " + fn +  " ALTER COLUMN " + ser + " TEXT(200)";
    ADOQuery2->SQL->Add(str);
    ADOQuery2->ExecSQL();
    str = "ALTER TABLE " + fn +  " ALTER COLUMN " + Nexp + " TEXT(200)";
    ADOQuery2->SQL->Clear();
    ADOQuery2->SQL->Add(str);
    ADOQuery2->ExecSQL();
ADOTable1->Close();
ADOConnection1->Connected = false;
} 


Этот код для оиргинальной таблицы с пробелами
              if(ADOTable->Active)
            ADOTable->Close();
         if(ADOConnection->Connected)
            ADOConnection->Connected = false;
                ADOConnection->Connected = true;
         ADOTable->Open();
         AnsiString fn = "База заключений", ser = "Сертификат",
                    str = "ALTER TABLE " + fn +  " ALTER COLUMN " + ser + " TEXT(200)";
         TableN->Text = str;
         ADOQuery1->SQL->Clear();
         ADOQuery1->SQL->Add(str);
         ADOQuery1->ExecSQL();
         ADOQuery1->SQL->Clear();
                 str = "ALTER TABLE База заключений ALTER COLUMN Номер экспертизы TEXT(200)";
         ADOQuery1->SQL->Add(str);
                 ADOQuery1->ExecSQL();
                 ADOTable->Close();
         ADOConnection->Connected = false;

Автор: volvo877 17.2.2008, 16:26
Код

  Nexp = "[Номер эспертизы]"; // <--- Название содержит пробелы, пользуйся скобками

Автор: Perun 17.2.2008, 17:01
Спасибо, вразумили.
Посоветуйте, что мне почитать про ADO и синтаксис SQL для Builder.
Про пробелы я знал, что в кавычки надо заключитm

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)