Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBF


Страницы:   1 2

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 если можно сразу перегонять в нужный тебе формат?" Так вот я и не знаю как сразу - поэтому и прошу здесь помощи......  Задание есть, а посоветоваться не с кем :-(


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо