Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.007 c
1-51752
eruc
2002-12-04 17:32
2002.12.16
как остановить курсор мыши ?


3-51565
dimonka
2002-11-26 23:14
2002.12.16
FastReport


14-51934
vopros
2002-11-25 17:20
2002.12.16
На что уходят мои налоги.


14-51906
Filat
2002-11-24 10:00
2002.12.16
Запись на CD-R, CD-RW


14-51925
Anatoly Podgoretsky
2002-11-25 07:56
2002.12.16
Именинники 25 ноября





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский