Як змінити розмір поля бази даних

Привіт. Скажіть, як можна програмно змінити розмір та/або тип поля бази даних у Delphi? Якщо єдина можливість за допомогою DBIDoRestructure, то що це таке, який модуль підключати?Дякую.

DDL SQL -> ALTER TABLE (Help-Delphi Tools-Local SQL)

Спасио, може розберуся

Розібрався? Те саме питання у мене.

у хелпі написано: It is possible to delete and add a column of the same name in the same ALTER TABLE statement, whever any data in the column is lost in the process.

Як же бути з заповненою таблицею?

Так і не використовую цю можливість.

> Як бути з вже заповненою таблицею?Дивлячись як і що міняти. Головне, не порушувати цілісність даних. Нехай, скажімо, хочеш зменшити довжину string(прим.30) на 5. Якщо в тебе всі значення менше або рівні 25, то нічого не буде. Я перевіряв на Парадоксі.

Чи не розібрався. Знайшов я в довідці ALTER TABLE, але як використовувати в Delphi? Query.SQL "не розуміє" параметра ALTER Використовуючи параметри в Database "Database1.Execute(SQLstmt, stmtParams, False, nil);" SQLstmt також не розуміє ALTER. Як правильно використовувати це?

Я взагалі, мабуть, не там копаю. У хелпі Delphi(7) насилу знайшов по ALTER TABLE, і то не в Help-Delphi Tools, просто в Help-Delphi Help. Megabyte[5], я бачу ви знаєте суть питання, допоможіть.

Що, то ні хто й не допоможе?

qry.SQL.Text := "ALTER TABLE. "; qry.ExecSQL;

це чудово працює, якщо до таблиці ніхто не підключений

Desdechado[9] - Спас. спробую зараз

не виходить! Роблю так: . try Query1.Close; Query1.SQL.Clear; Query1.SQL.Text:="ALTER TABLE "prb.db" ALTER COLUMN SIZE 52"; Query1.ExecSQL; except ShowMessage("error"); end; .

отримую: Недозволений використовувати keywoed Token: ALTER (Line 1)

Добре. У мене D7, у довідці я знайшов лише згадку про ALTER TABLE, якщо ви про Database1.Execute(SQLstmt, stmtParams, False, nil)[6], то схоже я списав з довідки, тільки там про INSERT INTO, синтаксис команд у моєму випадку до чого можна застосувати? Які компоненти потрібно використовувати, якщо не Query, Database не розуміють ALTER? Невже треба обов'язково говорити загадками! Я ж не зовсім тупий. Ще раз, sniknik, про який синтаксис йдеться? Невже важко направити людину в потрібне русло та підказати! З 6 повідомлень я з'ясував лише, що десь у довідці D є все про ALTER TABLE тощо. Може, у мене довідка не повна?

А самому знайти файл localsql.hlp і в ньому опис ALTER TABLE не судилося? Або купити будь - який підручник з SQL ?

> Які компоненти слід використовувати, якщо не Query, > Database не "розуміють" ALTER?

Саме TQuery треба використовувати. А так само треба "використовувати" якийсь підручник з Дельфі.

ALTER TABLE statement

Adds or deletes a column from a table.

ALTER TABLE table_reference DROP [COLUMN] column_reference ADD [COLUMN] column_reference [,reference DROP [COLUMN] column_reference ADD [COLUMN] column_reference. ]

Використовуйте ALTER TABLE statement to add column to or delete a column from an existing table. Це можливе, щоб вибрати одне коло і придбати інший в самий ALTER TABLE statement.

DROP keyword необхідний тільки для name of the column to be deleted. ADD keyword потребує самої комбінації з column name, type, і ймовірно dimension definition as CREATE TABLE when defining new columns. See the section on definingтипи стовпців для певного синтаксису всіх підтримуваних типів стовпців.

Наведений нижче оператор видаляє стовпець FULLNAME і додає стовпець LASTNAME.

ЗМІНИТИ ТАБЛИЦЮ "Names.db"

ВИДАЛИТИ Повне ім’я, ДОДАТИ Прізвище CHAR(25)

Можна видалити та додати стовпець із таким самим ім’ям у тому самому операторі ALTER TABLE, однак усі дані у стовпці буде втрачено під час цього процесу. Це дозволяє швидко перевизначати стовпці ще на стадії розробки бази даних.

ЗМІНИТИ ТАБЛИЦЮ "Names.db"

ВИДАЛИТИ Прізвище, ДОДАТИ Прізвище CHAR(30)

Якщо стовпець, який потрібно видалити, є частиною первинного ключа, первинний індекс буде видалено. ALTER TABLE не вдається видалити стовпець, який є метою обмеження зовнішнього ключа (посилальна цілісність).

Щоб посилатися на стовпці з неалфавітно-цифровими символами або пробілами, вбудованими в ім’я стовпця, потрібно взяти ім’я стовпця в лапки та поставити перед назвою стовпця назву таблиці в лапки.

ЗМІНИТИ ТАБЛИЦЮ "Customer.db"

TQuery добре розуміє такий синтаксис:

ALTER TABLE table_reference DROP [COLUMN] column_reference ADD [COLUMN] column_reference [,посилання DROP [COLUMN] column_reference ADD [COLUMN] column_reference. ]

Прямо із справки взято. т.е. можна видалити і додати столбці

Це друга справа, спасибі!

Кошмар! Відкриваю справку Delphi Tools, а локальний SQL прямо перед очима виявляється, як я його не найшов, трезвий вроде. Кстати, питання про зміну розміру поля або його типу, доведеться сочити синтаксис? Мне добавить столбец пока не надо.

ALTER TABLE ALTER COLUMN TYPE VARCHAR(10);

А шо в LocalSQL є ALTER COLUMN TYPE VARCHAR(10);?

Ви знаєте, я створив 6-7 різних сторінок в Інете за цим питанням, CREATETABLE, ALTER TABLE і т.п, одна з них дуже хороша - велика і докладна, у двох з них згадується SIZE для COLUMN! (У довідці Delphi взагалі про SIZE не знайшов). Все там є, в цих сторінках, і навіть тип змінити, на мою думку, зустрів. Додавати стовпець вдалося. Але синтаксис для SIZE не може знайти. Пробував писати як за алгоритмом ALTER TABLE ALTER COLUMN підставляв SIZE туди-сюди - то на ALTER лається, то на COLUMN

sniknik[21] Мені потрібно тільки одне - правильний ситаксис до зміни розміру, у бік збільшення, поля бази даних. Повторюю, (У довідці Delphi взагалі про SIZE не знайшов). Якщо знаєте, то скажіть, як правильно скласти команду. Якщо не знаєте, то так і скажіть - "НЕЗНАЮ"! ЗИ: sniknik [21] у вас на клаві м'який знак западає

не знайшов бо немає.

> Якщо знаєте, то скажіть як правильно скласти команду. Так як ти намагаєшся, правильно не вийде, немає такого в локал sql. (хоча з чого ясно що використовується він? важко давати точні поради на теми "загалом";)

> ЗИ: sniknik[21] у вас на клаві м'який знак западає не западає, просто я неписьменний у російську мову.

Ось вирізка з 14, де прямо сказано про розмір andposible dimension definitionas CREATE TABLE when defining new columns.Визначення розділу column typesдля конкретної syntax з усіх підтриманих column types.

Жах, скільки шуму з нічого!:( AP[24] радить мені глянути синтаксис при CREATE TABLE, типу, це мені допоможе. Буду в захваті:( Просто можна було від початку підказати, що в Local SQL просто не можна міняти розмір поля командою ALTER TABLE, ALTER COLUMN, а треба дивитися CREATE TABLE А я 3 дні мучаюсь цим питанням.

>Знати все я не можу як і ті хто вам підказує, але волею випадку (і завзятих занять/досліджень) випадково. знають про поставлене питання, і вам підказують де шукати і що. а ви вперто не розумієте (робите вигляд.) і фактично змушуєте дати вам точну відповідь. (що робити ламає, треба згадати/перевірити і взагалі витрачати час на відміну від вказівки, де це можна знайти)

> А я 3 дні мучаюсь цим питанням. І набагато більше мучитеся з такими методами. замість вивчення довідки. Те, що ви хелп не читали, навіть обговоренню не підлягає. прямий з тієї ж витримки хелпу в [14] (частково в [3]) на які вже вказували

redefinition of columns while still in the database design stages.

ALTER TABLE "Names.db"
DROP LastName, ADD LastName CHAR(30)

тобто. є можливість видалити та створити поле з тим же ім'ям, допустимо спочатку довжина поля LastName 15 символів. чим не зміна розміру?
тільки ось дані загубляться але і про це написано в тій же фразі ". проте ці колонки загубляться в процесі. . ".
і не > треба дивитися CREATE TABLE.

p.s. ну якщо і це незрозуміло, то я не знаю. ;о))
p.p.s.
> AP[24] радить мені глянути синтаксис у CREATE TABLE, типу, це мені допоможе.
він намагався привернути вашу увагу до того, де вказується розмір поля. ви побачили те, що побачили, а треба було ". дивись розділ визначення типів колонок. "(друге виділення). мабуть теж ваше SIZE око ріже.
тобто. це типу вам не допоможе. т.к. покликане розвіяти помилки, а не допомогти в їх реалізації.

ALTER TABLE "Names.db"
DROP LastName,ADD LastName CHAR(30)
ч.в., я ж SIZE шукав! Думав можна без побоювання просто збільшити розмір поля. DROP побоявся застосувати.
Вибачте, якщо щось не так.

Можна стверджувати, щоLocal SQLзміни параметрів стовпця таблиці можливі тільки шляхом видалення і, після, додавання стовпця з тим же ім'ям, але з новими параметрами:

ALTER TABLE"tablename"DROPcolumnname

ALTER TABLE"tablename"ADDcolumnname varchar(size),
що неминуче веде до втрати даних.