Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизЗадолбал Memo. Осущекствляю импорт из dbf в MSSQL7 Найти похожие ветки
← →
zks (2002-11-22 08:42) [0]Здраствуйте Все!
Мне нужен ваш совет.
Осуществляю импорт данных из dbf(FoxPro windows) файла в базу MSSQL. В источнике поле PS_Prot Имеет тип Memo(10).
Вопрос первый в MSSQL какой тип поля близок к Memo.
Вопрос два Как загнать данные.
Использую ADO. К источнику обращаюсь через ODBC.
Вставку записей делаю через ADOQuery.
Текст SQL
INSERT INTO Table
VALUES(:Data, :Suname, :Name, :Otchestvo, :PS_Prot)
← →
stone (2002-11-22 09:19) [1]
> Вопрос первый в MSSQL какой тип поля близок к Memo
Character Strings
char
Fixed-length non-Unicode character data with a maximum length of 8,000 characters.
varchar
Variable-length non-Unicode data with a maximum of 8,000 characters.
text
Variable-length non-Unicode data with a maximum length of 2^31 - 1 (2,147,483,647) characters.
Unicode Character Strings
nchar
Fixed-length Unicode data with a maximum length of 4,000 characters.
nvarchar
Variable-length Unicode data with a maximum length of 4,000 characters. sysname is a system-supplied user-defined data type that is functionally equivalent to nvarchar(128) and is used to reference database object names.
ntext
Variable-length Unicode data with a maximum length of 2^30 - 1 (1,073,741,823) characters.
Читай внимательнее HELP
> Вопрос два Как загнать данные
В MSSQL есть прекрасный сервис для трансформации данных, он так и называется Data Transformation Service
← →
zks (2002-11-22 09:24) [2]За типы данных спасибо, но перекачка данных должна заниматься сама программа, а не сервис. Такое требование.
← →
asmith (2002-11-22 13:20) [3]Так вот как раз Data Transformation Service можно юзать из написанной тобой программы. Сделай руками в MS SQL Server EM трансформацию (там визарды простые, как грабли), оттестируй его при ручном запуске, потом попроси визард сгенерить VB код и перепиши его на Delphi. Получишь утилиту быстрой заливки данных, которая будет работать не просто быстрее того, что можно сделать традиционными средствами, а быстрее на несколько порядков! Это не слова, а научно проверенный факт.
← →
stone (2002-11-22 13:33) [4]asmith (22.11.02 13:20)
можно сделать еще проще. Полученный Package можно загнать в Job, который потом запускать по команде из приложения.
← →
zks (2002-11-26 11:30) [5]Все потресающее, НО НЕРАБОТАЕТ. Выдает ошибку, что не может осуществить копирование данных.
Кому не жалко киньте ссылку про MSSQL 7.0 (2000) & DELPHI.
Почитаю, может решу проблему.
← →
sniknik (2002-11-26 12:00) [6]У тебя могут быть приблемы с мемо изза разных провайдеров (для dBase, Foxpro, Clipper они разные, мемо в смысле)
вот например у меня работает запрос из MSSQL
SELECT * FROM
OpenDataSource("Microsoft.Jet.OLEDB.4.0",
"Data Source="D:\";User ID=Admin;Password=;Extended properties=dBase IV")...TEST
(кстати с небольшими изменениями можно в INSERT INTO переделать)
таблица TEST в ней поле мемо, откывается замечательно потому что она сама типа dBase
а вот запрос к той же таблице дает ошибку
select * from
OpenRowset("MSDASQL.1", "Driver=Microsoft Visual FoxPro Driver;SourceDB=D:\;SourceType=DBF;",
"select * from TEST")
таблица dBase а драйвер FoxPro, вот и ошибка была бы таблица Foxpro было бы наоборот. а вот для таблиц без мемо полей и индексов оба драйвера нормально работают.
вообше совет, попробуй в Query Analizere сначала селекты к твоим таблицам отработать.
← →
zks (2002-11-27 04:32) [7]SELECT-ом открывается нормально драйвер FoxPro.
Проблема возникает при копировании данных. То говорит, что предоставлены неполные сведения для объекта Parameters (хотя у меня типы всем параметрам присвоены), то говорит, что проблема конвертации поля типа стринг в бинарный. ????
Сейчас пробую сделать по другому.
Напишу получилось или нет.
← →
sniknik (2002-11-27 08:23) [8]если инсерт типа такого
INSERT INTO Table
VALUES(:Data, :Suname, :Name, :Otchestvo, :PS_Prot)
то возможна путаница полей (присваивает не тому полю с другим типом), указывай явно, типа
INSERT INTO Table (Data, Suname, Name, Otchestvo, PS_Prot)
VALUES(:Data, :Suname, :Name, :Otchestvo, :PS_Prot)
при dcnfdrt bp селекта
INSERT INTO Table (Data, Suname, Name, Otchestvo, PS_Prot) SELECT Data, Suname, Name, Otchestvo, PS_Prot FROM TableSourse
← →
zks (2002-11-28 04:20) [9]sniknik
Частично получилось когда перечислил поля, но глюк есть.
При возникновении исключительной ситуации можно ли отловить в какому параметру или полю присвоили не тот тип.
И вопрос? у меня 15 таблиц. Для каждой инсерт осуществлялся нормально (не перечислял поля), а для одной (см выше) надо. Чем это можно объяснить.
Спасибо за подсказку.
← →
sniknik (2002-11-28 08:47) [10]обьяснить? легко.
у ADO есть метод (не помню точно) GetField(s)Name(s) (а может и совсем по другому пишется)
неважно, смысл в получении полей таблици, но сам ADO этого не делает посылает запрос провайдеру, ну и зная это попробуй получить имена полей подключаясь к разным провайдерам, временами порядок не совпадает (ну нет на него (порядок) стандартов) а раз не всегда совпадает порядок то не всегда работает синтаксис без явного указания полей. Во всяком случае в хелпе по MSSQL есть строгая рекомендация использовать поля явно особенно при при запросах к внешним провайдерам.
отловить какому полю? ты получаеш строку ексепшена в ней написано какое? нет?, значит вряд ли. и зачем? пиши явно и их не будет (если конечно сам где тип не поменяеш, а в другом забудеш).
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c