Форум: "Базы";
Текущий архив: 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