Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Вниз

Как изменить размер поля базы данных...   Найти похожие ветки 

 
KotJunior   (2005-06-07 10:07) [0]

Здравствуйте.
Скажите, как можно программно изменить размер и(или) тип поля базы данных в Delphi? Если единственная возможность с помощью DBIDoRestructure, то что это такое, какой модуль подключать?
Спасибо.


 
msguns ©   (2005-06-07 10:14) [1]

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


 
KotJunior   (2005-06-07 12:51) [2]

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


 
td   (2005-06-07 17:15) [3]


> KotJunior   (07.06.05 12:51) [2]


Разобрался?
Тот же самый вопрос у меня.

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

Как же быть с уже заполненной таблицей?


 
Anatoly Podgoretsky ©   (2005-06-07 21:03) [4]

Так и не использую данную возможность.


 
Megabyte ©   (2005-06-07 21:04) [5]


> Как же быть с уже заполненной таблицей?

Смотря как и что менять. Главное, не нарушать целостность данных.
Пусть, допустим, хочешь уменьшить длину string(прим.30) на 5.
Если у тебя все значения меньше или равны 25, то ничего не будет.
Я проверял на Парадоксе.


 
KotJunior   (2005-06-08 06:02) [6]

Не разобрался. Нашел я в справке по ALTER TABLE, но как использовать в Delphi? Query.SQL "не понимает" параметра ALTER
Используя параметры в Database "Database1.Execute(SQLstmt, stmtParams, False, nil);" SQLstmt также не понимает ALTER. Как же правильно использовать это?


 
KotJunior   (2005-06-08 07:18) [7]

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


 
KotJunior   (2005-06-08 17:07) [8]

Что, так ни кто и не поможет?


 
Desdechado ©   (2005-06-08 18:35) [9]

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

это прекрасно работает, если к таблице никто не подключен


 
KotJunior   (2005-06-09 03:07) [10]

Desdechado[9] - Спас. попробую сейчас


 
KotJunior   (2005-06-09 03:23) [11]

не получается!
Делаю так:
...
try
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:="ALTER TABLE "prb.db" ALTER COLUMN SIZE 52";
Query1.ExecSQL;
except
 ShowMessage("error");
end;
...

получаю:
Invalid use of keywoed Token: ALTER (Line 1)


 
sniknik ©   (2005-06-09 08:01) [12]

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


 
KotJunior   (2005-06-09 09:09) [13]

Хорошо. У меня D7, в справке я нашел только упоминание про  ALTER TABLE, если вы про Database1.Execute(SQLstmt, stmtParams, False, nil)[6], то похожее я списал со справки, только там про INSERT INTO,  синтаксис команд в моём случае к чему применимо? Какие компоненты нужно использовать, если не Query,  Database не "понимают" ALTER?  Неужели нужно обязательно говорить загадками! Я ж не совсем тупой. Еще раз, sniknik, о каком синтаксисе идет речь? Неужто трудно направить человека в нужное русло и подсказать! Из 6 сообщений я выяснил только, что где-то в справке D есть все про ALTER TABLE и т.п. Может у меня справка не полная?


 
Zacho ©   (2005-06-09 09:43) [14]

2 KotJunior :

А самому найти файл 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...]

Description

Use the ALTER TABLE statement to add a column to or delete a column from an existing table. It is possible to delete one column and add another in the same ALTER TABLE statement.

The DROP keyword requires only the name of the column to be deleted. The ADD keyword requires the same combination of column name, type, and possibly dimension definition as CREATE TABLE when defining new columns. See the section on defining column types for the specific syntax of all supported column types.

The statement below deletes the column FULLNAME and adds the column LASTNAME.

ALTER TABLE "Names.db"

DROP FullName, ADD LastName CHAR(25)

It is possible to delete and add a column of the same name in the same ALTER TABLE statement, however any data in the column is lost in the process. This allows quick redefinition of columns while still in the database design stages.

ALTER TABLE "Names.db"

DROP LastName, ADD LastName CHAR(30)

If a column to be deleted is part of a primary key, the primary index is deleted. ALTER TABLE fails on an attempt to delete a column that is the target of a foreign key constraint (referential integrity).

To reference columns with non-alphanumeric characters or spaces embedded in the column name, you must enclose the column name in quotation marks and prefix the quoted column name with the table name in quotes.

ALTER TABLE "Customer.db"

ADD "Customer.db"."#ID" CHAR(3)


 
Rep ©   (2005-06-09 09:44) [15]

TQuery хорошо понимает синтаксис такой:

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

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


 
KotJunior   (2005-06-09 11:04) [16]

Это другое дело, спасибо!


 
KotJunior   (2005-06-09 11:14) [17]

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


 
Prohodil Mimo ©   (2005-06-09 13:15) [18]

ALTER TABLE <TBL_NAME>
ALTER COLUMN <COL_NAME> TYPE VARCHAR(10);


 
Rep ©   (2005-06-09 13:54) [19]

А шо в LocalSQL есть
ALTER COLUMN <COL_NAME> TYPE VARCHAR(10);?


 
KotJunior   (2005-06-09 15:59) [20]

Вы знаете, я нарыл 6-7 различных страниц в Инете по данному вопросу, CREATE TABLE, ALTER TABLE и т.п, одна из них очень хорошая - большая и подробная, в 2-ух из них упоминается SIZE для COLUMN! (В справке Delphi вообще про SIZE не нашел). Всё там есть, в этих страницах, и даже тип изменить, по-моему, встретил. Добавлять столбец получилось. Но синтаксис для SIZE не могу найти. Пробовал писать как по алгоритму
ALTER TABLE <TBL_NAME>
ALTER COLUMN <COL_NAME>
подставлял SIZE туда-сюда - то на ALTER ругается, то на COLUMN


 
sniknik ©   (2005-06-09 16:16) [21]

не надо рыть, надо читать по тому чем пользуешся, и пользоваться тем о чем читаеш. а то что ты там нашол для оракла к примеру или первасвиля, bde (local sql, без подключений др. движков) это до фени. ни в жизнь ты его не уговориш сменить синтаксис.


 
Wood   (2005-06-10 02:59) [22]

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


 
sniknik ©   (2005-06-10 08:51) [23]

не нашол потому что нету.

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

> Нсли не знаете, то так и скажите -"НЕЗНАЮ"!
я даже если и не знаю, в состоянии найти в справке нужное место, проанализировать и написать то что нужно... чему и тебя пытались научить(?)/заставить(?). не хочеш не надо, а писать за тебя код даже в малом(в малом даже вернее) никто не будет скорее всего.
что делать говорили, в [3] даже есть выдержка из хелпа конкретное указание, в [5] подтверждение работы этого для парадокса... (не гарантия для всех ;о)) в [14] полностью раздел, с примерами (один из них тебе нужен).
думай в обшем.
кстати я сомневаюсь что так пройдет без потери данных, и делал бы в 3 команды (но проверять не буду, Megabyte говорит работает... хотя тоже может другой движок имеет ввиду ;).

> ЗЫ: sniknik[21] у вас на клаве мягкий знак западает
не западает, просто я неграмотный в руский язык.


 
Anatoly Podgoretsky ©   (2005-06-10 09:51) [24]

Вот вырезка из 14, где прямо сказано про размер
and possibly dimension definition as CREATE TABLE when defining new columns. See the section on defining column types for the specific syntax of all supported column types.


 
KotJunior   (2005-06-10 12:00) [25]

Ужас, сколько шума из ничего!:(
AP[24] советует мне глянуть синтаксис при CREATE TABLE, типа, это мне поможет. Буду в восторге:(
Просто можно было с самого начала подсказать, что в Local SQL просто нельзя менять размер поля командой ALTER TABLE, ALTER COLUMN, а надо смотреть CREATE TABLE. А я 3 дня мучаюсь этим вопросом. Объять необъятное невозможно. Знать всё я не могу


 
sniknik ©   (2005-06-10 14:22) [26]

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

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

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

it is possible to delete and add a column of the same name in the same ALTER TABLE statement, however any data in the column is lost in the process. This allows quick 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 глаз режет.
т.е. это типа вам не поможет. т.к. призвано развеять заблуждения а не помочь в их реализации.


 
KotJunior   (2005-06-10 14:31) [27]

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


 
KotJunior   (2005-06-14 06:04) [28]

Можно утверждать, что в Local SQL изменения параметров столбца таблицы возможны только путем удаления и, после, добавления столбца с тем же именем, но с новыми параметрами:<br>
ALTER TABLE "tablename" DROP columnname<br>
ALTER TABLE "tablename" ADD columnname varchar(size), <br>что неминуемо ведет к потере данных.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.012 c
14-1120488797
Kerk
2005-07-04 18:53
2005.07.25
Вывод средств из WebMoney


1-1120461725
Паша
2005-07-04 11:22
2005.07.25
Подключение модулей в uses


8-1111831947
Quattro
2005-03-26 13:12
2005.07.25
выезжающая картинка


1-1120557755
Uran
2005-07-05 14:02
2005.07.25
Событие на bitmap в stringgrid


14-1120352779
Cheater
2005-07-03 05:06
2005.07.25
"Ведьма из Блэер". Чем кончилось?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский