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

Вниз

Как переименовать поле в физической базе прогаммным путем?   Найти похожие ветки 

 
SCORPION ZP   (2003-07-01 20:53) [0]

Есть таблица в формате dBASE. В неё программно добавляем поля,
причем новые могут совпадать по имени с уже существующими. И вот
очень желательно переименовать не новые поля, а старые -
совпадаюшие...


 
Dred2k   (2003-07-01 22:30) [1]

Для нужного рабочего эффекта придется переструктурировать таблицу (со всеми вытекающими). bde32.hlp -> dbiDoRestructure. Или использовать запрос с алиасами для имен полей...

Но вот зачем это - вопрос.
Ведь добавляешь, небось, lookup или calculated ?


 
гончий   (2003-07-02 08:48) [2]

Попробуй компонент TRenameFields из пакета DegisyDb: http://www.degisy.com/download.php?lang=rus
Меняет названия полей для таблиц dBase & Paradox (пакетно).
Очень легко применить в проекте, бесплатный и с исходными текстами :)


 
SCORPION ZP   (2003-07-02 10:37) [3]

Dred2k Почему не работает след код в LocalSQL для dBASE
Query1.sql.text:="ALTER TABLE "SHOPKR.DBF" RENAME COLUMN DURATION2 TO DURATION_2";
Выдает Error message "Invalid use of Keyword. Token: RENAME"
Но RENAME используется в SQL...

гончий
Спасибо! Мне просто хотелось сделать это одной строкой SQL, типа
той что я написал...


 
гончий   (2003-07-02 10:41) [4]

В local sql нельзя изменить ни тип, ни имя поля к сожалению!


 
Anatoly Podgoretsky   (2003-07-02 10:44) [5]

SCORPION ZP © (02.07.03 10:37)
Просто там нет RENAME.
Синтаксис описан в справке подробно!


 
SCORPION ZP   (2003-07-02 10:44) [6]

гончий
В конструкторе Database Desktop это делается легко, а програмным путем ... я не знаю


 
SCORPION ZP   (2003-07-02 10:48) [7]

Anatoly Podgoretsky
Что вы посоветуете. Неужели я первый пытаюсь поменять имя поля программно. Нет на это дело стандартной процедуры или функции?
Или нужно пользоваться сторонними компонентами типа TRenameFields


 
Anatoly Podgoretsky   (2003-07-02 10:56) [8]

Когда не идут прямые пути, то используются обходные, а их много
от 6 шаговой композиции с Add/Drop до создания новой таблицы.
Database Desktop делает это вторым путем.


 
гончий   (2003-07-02 10:59) [9]

Тебе ничто не мешает посмотреть как это сделано в TRenameFields и сделать самому! Там как и в Database Desktop все реализовано через DbiDoRestructure


 
SCORPION ZP   (2003-07-02 11:13) [10]

гончий
А как подключить TRenameFields к Delphi - скинуть все
в "C:\Program Files\Borland\Delphi6\Lib"


 
sniknik   (2003-07-02 11:16) [11]

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

Anatoly Podgoretsky
дяденька не бейте меня больно... :о)))


 
Anatoly Podgoretsky   (2003-07-02 11:28) [12]

Это если только переименовать, но я думвю что с этим нормально справится и dbiDoRestructure, тем более что есть примеры в справке.


 
гончий   (2003-07-02 11:35) [13]

2 SCORPION ZP: его нужно установить как компонент. Если не хочешь устанавливать всю библиотеку - тебе необходимо зарегистрировать компонент TRenameFields (он находится в файле DbChk.pas)


 
SCORPION ZP   (2003-07-02 12:15) [14]

гончий
> тебе необходимо зарегистрировать компонент TRenameFields
> он находится в файле DbChk.pas

...файле DbChk.pas - А где этот файл в DegisyDataD7.dpk ?

Anatoly Podgoretsky и sniknik
1.DbiDoRestructure-?
2.Есть таблица dBASE, но по-моему данные в ней закодированы(т.к.
поля строковые...и в них должны быть цифры(!)-много денег, но их прочесть нельзя(кроме первого поля)). А вот работать с таблицей надо. А как? sniknik смотри ящик.


 
гончий   (2003-07-02 12:51) [15]

Не DegisyData! а DegisyDb!!!
http://www.degisy.com/ download.php?lang=rus


 
гончий   (2003-07-02 12:51) [16]

Не DegisyData! а DegisyDb!!!
http://www.degisy.com/download.php?lang=rus


 
SCORPION ZP   (2003-07-02 13:01) [17]

гончий
Установил всю библиотеку DegisyDb. Но при компиляции примера
выдает, что не может найти "DsDbUtils.pas". Вообщем всех модулей pas из dpk нигде нет. Панель "Degisy Data" в Delphi появилась...


 
SCORPION ZP   (2003-07-02 13:04) [18]

Оговорился действительно я скачал DegisyData...


 
гончий   (2003-07-02 13:10) [19]

Странная ошибка..сейчас вышлю этот файл


 
sniknik   (2003-07-02 13:24) [20]

> А как? sniknik смотри ящик.
у тебя там просто, в текстовые поля цифры занесены в битовом формате (хотя может это не цифры а шифровка) и похоже по 2 цифры в поле судя по разрыву между значимыми (но может так копейки отдельно хранятся), факт в том что в начале поля стоят символы #0 которые есть признак конца поля в PChar (а так как оно участвует в преобразовании....).
(по моему уже обсуждалось, не я точно уже раза три подобное обьяснял, но тот случай именно с тобой)

можно прочитать
1 текстовым редактором,
2 сторонними компонентами,
3 BDE DbiGetField/Record (это как раз там подсказали в том случае).
но в любом придется самому искать алгоритм по которому это поле формировали, и также его читать.


 
SCORPION ZP   (2003-07-02 15:03) [21]

sniknik
1.Да я понимаю, что открыть и посмотреть записи можно через
текстовый редактор. Два раза(или три) мне можешь не повторять...
Там в каждой ячейке по два числа(наверное по 3-4 цифры судя по тем нечитаемым символам). Так моей задачей является разбиение
каждого поля пополам: одно число в одну таблицу, а другое - в
другую. Только вот преобразовать строку с такими символами
в чило - просто не представляю как.
2.Даже, если сторонними продуктами мне удастся просмотреть (очень бы хотелось) записи, то все равно мне же это не даст
возможности с ними работать. Все одно нужна расшифровка.


 
Serginio   (2003-07-02 15:16) [22]

http://alyunov.narod.ru/files/dBase.htm
http://www.e-bachmann.dk/docs/xbase.htm
http://www.codenet.ru/progr/formt/intro.php
http://articlesd.h1.ru/docum/dbfall.php



 
SCORPION ZP   (2003-07-02 15:16) [23]

гончий
Я пока не разобрася как там работает DegisyDb в плане переименовывания полей. Как сделаю или возникнут проблемы - сообщу тебе.


 
гончий   (2003-07-02 15:31) [24]

Там все просто (читай файлы *.txt):
{--------------------------------------------------------------
TRenameFields компонент
--------------------------------------------------------------}
1. Перетащить компонент на главную форму Вашего приложения.
2. Установить свойство DatabaseName и TableName таким образом,
чтобы оно указывало на таблицу в которой необходимо изменить
названия полей.
3. В свойстве Mappings необходимо перечислить поля, которые
необходимо переименовать, например:

property Mappings:
(
NAME=AnimalName
SIZE=AnimalSize
WEIGHT=AnimalWeight
BMP=AnimalBmp
)
где, слева от знака равенства находится старое имя поля, а справа новое.

4. Вызвать функцию Execute компонента, которая в случае успешного переименования
вернет значение True. Также можно вызвать эту функцию и в Design-time режиме,
нажав правой клавишей мыши на компоненте и выбрав пункт меню "Execute...".
-----------
Удачи!


 
sniknik   (2003-07-02 15:48) [25]

SCORPION ZP © (02.07.03 15:03)
> 2.Даже, если сторонними продуктами мне удастся просмотреть (очень бы хотелось) записи, то все равно мне же это не даст возможности с ними работать. Все одно нужна расшифровка.
какая расшифровка??? ты даже не знаеш что оно зашифровано а уже расшифровывать собрался. то что там число вместо текста ... ну и что?

читать можно приблизительно так (не проверял на работоспособность, совсем)

type
TMyCurr = packed record {поля по 16байт, в середине пусто + деньги упоминались, воэможно это 2 ->}
Val1: Currency;
Val2: Currency;
end;

pRecBuf: Pointer;
MyCurr: TMyCurr;
Blank: LongBool;
begin
Blank:= false;
pRecBuf := AllocMem(16);
DbiGetField(Table1.Handle, 2, pRecBuf, @MyCurr, Blank);
FreeMem(pRecBuf, 16)

if MyCurr = 0 then не получилось или пустое поле


почитал бы чего по внутренностям компов, про память, форматы/типы данных ... ets
а то немного нестандартное представление и уже тебя в тупик ставит.

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

p.s. не понимаю правда как это с переименовкой полей у тебя связано и чем переименовко в этом случае поможет/нужна?.


 
SCORPION ZP   (2003-07-02 17:01) [26]


> не понимаю правда как это с переименовкой полей у тебя связано
> и чем переименовко в этом случае поможет/нужна

1.Переименование полей - это ещё одна задача для решения. А задачи мне ставит шеф и зачем это ему понадобилось только он и знает...

> а то немного нестандартное представление и уже тебя в тупик
> ставит.

2.Не суди и не судим будешь... Раскалоли! Я работаю админом в игровом клубе, а в нагрузку вот с базами это ...


 
SCORPION ZP   (2003-07-02 17:14) [27]

гончий
Спасибо!!! Всё подробно описал. Как только освободится машина - попробую. Только алиас, имя таблицы и имена полей я буду задавать программно, но это сути не меняет.


 
SCORPION ZP   (2003-07-02 20:42) [28]

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


 
SCORPION ZP   (2003-07-02 21:07) [29]

Serginio
Спасибо за ссылки!


 
гончий   (2003-07-03 08:56) [30]

Удалено модератором
Примечание: Личная переписка


 
гончий   (2003-07-03 09:19) [31]

Тодбко что проверил работу TRenameFields на таблице Clients.dbf из DemoData Delphi - все работает великолепно и данные на месте :)


 
SCORPION ZP   (2003-07-03 10:19) [32]

Удалено модератором
Примечание: Личная переписка


 
гончий   (2003-07-03 11:18) [33]

Удалено модератором
Примечание: Личная переписка


 
SCORPION ZP   (2003-07-03 12:31) [34]

Удалено модератором
Примечание: Личная переписка


 
SCORPION ZP   (2003-07-03 16:30) [35]

гончий
Да действительно вопрос решен. Degisy forever!



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

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

Наверх




Память: 0.53 MB
Время: 0.008 c
3-77801
chexum
2003-07-02 15:53
2003.07.24
Обработка ошибок ADO


14-78127
Cranium
2003-07-08 22:12
2003.07.24
Модератор на сайте человек или ИИ? Сволочь ...


1-77982
lex7
2003-07-11 11:18
2003.07.24
Цвет MainMenu


1-77863
Kiril
2003-07-13 15:05
2003.07.24
[Error] Unsatisfied forward or external declaration... ?


14-78103
Omega27
2003-07-06 23:50
2003.07.24
перехват





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский