![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBF
Annet © (2005-09-16 08:16:00)Подскажите пожалуйста, как скинуть в dbf - файл данные в правильном формате (ну там поля разных типов и длин) из Delphi6.Ну никак не получается :-(
evvcom (2005-09-23 15:16:00) [1]Annet, ты гораздо меньше времени потратишь, если не будешь пользовать для непонятной конвертации Excel. Прочти еще раз [25]
isasa (2005-09-23 15:01:00) [2]Удивительно, не поленился, проверил, в пятницу!
Конвертер XLS -> DBF, для полей Character выставляет размер поля по ширине соответствующей колонки в таблице Excel.
Другими словами, если ширина колонки 8.43(у меня так по умолчанию), то будет 9. Если 50, то поле в DBF будет Character(50).
isasa (2005-09-23 14:50:00) [3]1. Если в ячейку Excel пишем число, а нам надо это поле представлять как Character, то используя правила Excel лучше
workSheet.Cells.Item[i,2].value:='''1234';
Конвертер это поймет и интерпретирует выражение 1234 как строку '1234', а не число. '''- в начале, потому что надо вставить одинарную кавычку в строку Delphi.
2.Для установки размера поля, например Character(50),
можно попробовать(здесь я не уверен для DBF, проверено только для PRN) - установить ширину соответствующей полю колонки в Excel
workSheet.Columns[<индекс нужной колонки(столбца)>].ColumnWidth = 50;
Annet (2005-09-23 14:15:00) [4]isasa! геморрой ачальство заказывает, а мне для них надо прогу доделать :-( Если честно, мне понятно не все, что ты написал в своем совете.... Может быть, есть время объяснить немного подробнее?
isasa (2005-09-23 13:51:00) [5]>Ну и зачем весь этот геморрой?
А кто его знает.
Но ...
> Если оставить Excel, то:
evvcom (2005-09-23 12:20:00) [6]
> isasa © (22.09.05 15:40) [26]
Ну и зачем весь этот геморрой? А есть уверенность в том, что данная подгонка не собьется на другой версии Excel? Зачем завязываться на третий инструмент, если легко можно обойтись без него?
isasa (2005-09-22 15:40:00) [7]Если оставить Excel, то:
1.При преобразовании данных учитывается формат ячейки, чтобы не было такого
>мне нужен столбец типа Character(4) получается Numeric(9)
для строковой ставить в начале данный одинарный апостроф( '12345 ), достаточно в первой строке, очень помогает.
2.Ширина поля данных берется по ширине столбша в пикселях, по крайней мере для PRN файлов это так, поэтому можно попробовать варьировать шириной колонки с данными(в Excel).
evvcom (2005-09-22 13:24:00) [8]Да разве это загвоздка? Если предыдущие dbf-ки нужны, то копируем пустую из шаблонов с нужным именем, если не нужны, можно старую Empty. Потом вьюха.Open; dbf-ка.Open; и в циклах dbf-ка.Fields[i].value := вьюха.Fields[i].value;с Next-ами. Никаких проблем. Только раз уж с параметрами, то лучше сделать хранимку на основе вьюхи.
Annet (2005-09-22 12:35:00) [9]Нет, структура одинаковая, просто существует несколько услуг, по ним идет статистика каждый день (до 10000) записей по каждой. Все это в одной вьюшке. А выбрать надо допустим по одной или по двум из них. И не только за сегодня, но может быть за неделю назад. Как эту логику вынести в DTS я не знаю... А в делфи пользователь сам забивает дату и ставит галочки у нужных услуг, затем идет выборка по заданным параметрам. А потом все должно скинуться в dbf табличку с полями заданных типов. Тут и загвоздка получается :-(
Max Zyuzin (2005-09-22 09:21:00) [10]>Annet © (22.09.05 08:36) [22]
Опять же не сяно тогда... у тебя каждый раз разные по структуре таблицы что ли получаются?
Annet (2005-09-22 08:36:00) [11]Я болела, только сегодня вышла.... Спасибо за советы.
По поводу DTS - он не подходит, т.к. все данные лежат во вьюшке и есть два пути:
1. делать вьюшку за конкретный день и выбирать dts - пакетом, но тогда если что - пользователи не смогут взять данные например недельной давности
2. делать выборку из вьюшки с помощью делфей за конкретный любой день (это может сделать сам пользователь) - тут и возникают сложности с типами полей dbf4....
Anatoly Podgoretsky (2005-09-16 17:07:00) [12]Annet © (16.09.05 13:54) [13]
А специалит по серверу есть, если есть то скоперировать и создать DTS пакет. Если нет, то самой разобраться, это одна из функций EM
alex_*** (16.09.05 14:58) [14]
Это замаскированый DTS
Anatoly Podgoretsky (2005-09-16 17:01:00) [13]Max Zyuzin © (16.09.05 16:21) [19]
Там можно весь процесс сделать визуально, а полученый скрипт сохранить, при необходимости изменить. Далее вызывать по запросу или с мощью MS SQL Agent - это встроеный планировщик.
Max Zyuzin (2005-09-16 16:21:00) [14]Правильный вариант, скорее всего, разобраться с такой штукой как Data Transformation Services (DTS) Это у MSSQL и написать правильный скрипт, который будет стартоваться в нужное время, делать запрос в Базу MSSQL и потом результат сбрасывать сразу в табличку dBase.
Но с этим нужно разбираться может какие нить монстры MSSQL ные тебе помогут, я сам с этим не разбирался.
2-й вариант напиасть на Delphi програмку которая будет делать запрос в базу MSSQL а потом все это переписывать непосредственно в файлик dBase
msguns (2005-09-16 16:16:00) [15]А что, простым запросом нельзя данные из скалы просто вставить в двф ?
Типа
DELETE FROM <.dbf>
INSERT INTO <.dbf>
(P1,P2,P3..)
SELECT P1,P2,P3.. FROM <таблица в скл>
Max Zyuzin (2005-09-16 16:04:00) [16]>Annet © (16.09.05 15:54) [16]
Я имел ввиду что структура таблицы фиксированая? В которые вы это все сбрасываете?
Annet (2005-09-16 15:54:00) [17]Задача следующая: раз в день таблицу (т.е выборка из таблицы в БД (где-то по 5000 новых записей каждый день) ) из MS SQL Server перекидывать в dbf4 и передавать эти данные уже в другой отдел... поэтому разовый экспорт не подходит: этим не я, а другой персонал занимается. Скидываем не в фиксированную таблицу dBase, а каждый день создаем новую.
Max Zyuzin (2005-09-16 15:05:00) [18]>Annet © (16.09.05 13:54) [13]
Ок, давай задачу уточним. Тебе необходимо каждый раз новую таблицу, или у тебя есть уже фиксированая таблица dBase в которую периодически необходимо сбрасывать некоторую таблицу из MSSQL? или там результать какой то выборки из MSSQL?
Или просто необходимо отфанаруную таблицу перекачать в dBase? Это операция единовременная или необходимо там раз в минуту перекачивать информацию?
alex_*** (2005-09-16 14:58:00) [19]если этот разовая работа может через Enterprize экспорт данных сразу в dbf сделать?
Annet (2005-09-16 13:54:00) [20]Максу: "Для чего использовать Excel если можно сразу перегонять в нужный тебе формат?" Так вот я и не знаю как сразу - поэтому и прошу здесь помощи...... Задание есть, а посоветоваться не с кем :-(