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

Вниз

Задолбал 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
3-51580
hostage2002
2002-11-26 15:54
2002.12.16
Записать OLE в поле SQL Server а


3-51572
Dbrf
2002-11-27 10:41
2002.12.16
Нумерация записей


3-51649
Dbrf
2002-11-28 16:23
2002.12.16
Выборка записей, ограниченных датами


3-51614
iZEN
2002-11-15 15:23
2002.12.16
Компоненты ADO в сервисе Win32


14-51932
?????
2002-11-24 21:37
2002.12.16
<a href=