Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.014 c
3-77764
RAHS
2003-06-28 14:41
2003.07.24
Нечеткое сравнение полей


1-77892
lex7
2003-07-14 11:08
2003.07.24
А как зарегистрировать в компоненте новое сообщение?


1-77882
Supra
2003-07-13 23:12
2003.07.24
Загрузка изображений из ресурсов


7-78162
DVM
2003-05-15 13:32
2003.07.24
Как вызвать диалог


1-77831
LedWorm
2003-07-11 23:53
2003.07.24
как узнать полный путь к папке ???