Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Вниз

1C 7.7 + Delphi + ADO + MS SQL   Найти похожие ветки 

 
Knight ©   (2008-05-27 16:37) [0]

У кого-нить есть открытый пример внешней компоненты 1С 7.7 на Delphi для забора данных из базы MS SQL с использованием хранимых процедур?


 
tesseract ©   (2008-05-27 16:46) [1]

Тут смотри, правда геммороя много.....

http://www.1cpp.ru/forum/YaBB.pl


 
Ослик   (2008-05-27 17:48) [2]

Зачем Дельфи?
Из 1с 7.7 можно напрямую работать с чем угодно, хоть с mssql, хоть с Ороклом или IB, лишь бы был установлен в системе соответствующий OLEDB или ODBC драйвер.


 
Knight ©   (2008-05-28 08:02) [3]

> [2] Ослик   (27.05.08 17:48)

Можно пример или что-то что можно использовать для поиска оного?
В доке ничего не нашёл.


 
Knight ©   (2008-05-28 09:09) [4]

Нужно из базы другой программы загрузить данные в обработку для формирования отчёта, используя хранимые процедуры...


 
Ослик   (2008-05-28 10:58) [5]

Дело в том, что язык 1с позволяет создавать экземпляры любых ОЛЕ объектов и работать с ними.
Единственная досадная проблема заключается в том, что в 1с7.7 нет значения null. Но я всегда как-то находил пути обхода этого.
Пример работы с SP на MSSQL:


Процедура Сформировать()
adParamInput = 1;
adParamOutPut = 2;
adParamReturnValue = 4;
adInteger  = 3;
adCurrency  = 6;
adDecimal  = 14;
adBigInt  = 20;
adNumeric  = 131;
adDate   = 7;
adChar   = 129;
adVarChar  = 200;
adLongVarChar = 201;

con = СоздатьОбъект("ADODB.Connection");
con.Open("Provider=SQLOLEDB;Data Source=(local);Initial Catalog=cas;User ID=cas;Password=1;");

cmd = СоздатьОбъект("ADODB.Command");
cmd.ActiveConnection = con;
cmd.CommandType = 1;
cmd.CommandText = "exec ? = cas.test_sp @test_string = ?, @test_date = ?";
cmd.Parameters.Append(cmd.CreateParameter("@RetVal"  , adInteger , adParamReturnValue));
cmd.Parameters.Append(cmd.CreateParameter("@test_string" , adVarChar , adParamInput, 50 ));
cmd.Parameters.Append(cmd.CreateParameter("@test_date"  , adDate , adParamInput));
cmd.Parameters(1).Value = "проба пера";
cmd.Parameters(2).Value = РабочаяДата();
cmd.Execute();
con.Close();
Сообщить(cmd.Parameters("@RetVal").Value);

КонецПроцедуры


 
Ослик   (2008-05-28 11:01) [6]

Также можно получать рекордсет и полноценно работать с ним, как работал-бы из дельфи.


 
Knight ©   (2008-05-28 11:40) [7]

> [6] Ослик   (28.05.08 11:01)

А как сет вернуть?


 
Slym ©   (2008-05-28 11:55) [8]

con.Execute("Select * from table");
или
Recordset = СоздатьОбъект("ADODB.Recordset");
Recordset.Open("Select * from table", con, adOpenStatic, adLockOptimistic);


 
Ослик   (2008-05-28 12:04) [9]

Или в моем примере если test_sp возвращает рекордсет, то вместо
cmd.Execute();
что-то типа:
rs = cmd.Execute();
и уже работай с ним.

Но вообще, это уже вопросы не по 1с, а по АДО.
Смотри исходники АДО компонент в Дельфи и делай также в 1С. Или книжку купи/скачай по технологии АДО. На сайте Микрософта, кажись, бесплатная валялась для скачивания, но могу и наврать.


 
Knight ©   (2008-05-28 12:31) [10]

Спасибо. Законнектилось... осталось выянить как поля из сета взять... пошёл искать. С АДО как-то до сих пор не сталкивался :)


 
Ослик   (2008-05-28 12:39) [11]

http://www.podgoretsky.com/ftp/Docs/DB/chm/ProgADO.chm


 
Knight ©   (2008-05-28 12:59) [12]

Во нашёл
http://www.kb.mista.ru/article.php?id=309


 
Ослик   (2008-05-28 13:52) [13]

Там фигня какая-то.
Предлагают работать с дбф-камим через АДО, хотя "родной" движок 1с работает с дбф-ками более чем на порядок быстрее.
К тому-же mssql может вернуть сразу несколько рекордсетов, что будешь делать в этом случае?
Лучше скачай нормальную книжку по моей ссылке, там все есть.
:)


 
Knight ©   (2008-05-28 14:36) [14]

> [13] Ослик   (28.05.08 13:52)

Что-то заработало!!!!

ЕЕЕЕЕ!!!

:))))))))

Книгу скачаю, но поищу русский аналог. Мой инглишь не на столько крут :)


 
Knight ©   (2008-05-28 14:37) [15]

Да... ещё раз спасибо %)

:ПЫВО:


 
tesseract ©   (2008-05-28 14:40) [16]


>  хотя "родной" движок 1с работает с дбф-ками более чем на
> порядок быстрее.


Насмешил, спасибо.

Я то всё дурак на прямые запросы перевёл с таймером - а 1с видишь-ли быстрее.....   Может 1С ещё и MEMO поддерживать научилась ?


 
Ослик   (2008-05-28 15:09) [17]

[16] tesseract ©   (28.05.08 14:40)
Конечно быстрее, я несколько лет назад делал тесты.
Впрочем, наверняка быстродействие зависит от задачи, возможно у тебя было что-то, когда куча прослоек и оберток оказались быстрее простого файлового доступа. Но, сомневаюсь. :)

С мемо, кстати, когда то раньше работала, я хорошо помню в древних версиях 1с мемофайлы у дбф-ок, но может это было еще в 7.5.
Сейчас если нужна работа с дбф-ками с мемофайлами, конечно придется использовать АДО или что-то еще.

Вообще, из 1с работать с дбф-ками, на мой скромный взгляд, имеет смысл только для экспорта/импорта с другими системами и когда нет нормального доступа к СУБД этих других систем.

Кстати, а что такое "с таймером"? :)


 
Knight ©   (2008-05-28 15:14) [18]

Ещё раз влезу...

Беру из базы поле DateTime, а 1с отображается только дата. Как указать?


 
tesseract ©   (2008-05-28 16:11) [19]


> Кстати, а что такое "с таймером"? :)


_GetPerformanceCounter()


> Конечно быстрее, я несколько лет назад делал тесты.


И какие интересно ? Последовательный перебор ? Если ты в индексы не попадал, то возможно и медленее. Так, запрос через ADO примерно в 5-10 раз быстрее встроенного парсера. Иначе бы вопрос не поднимался.


> я хорошо помню в древних версиях 1с мемофайлы у дбф-ок,
> но может это было еще в 7.5.


Сейчас они через кучу срочек эмулируються в DBF версии.


> Беру из базы поле DateTime, а 1с отображается только дата.
>  Как указать?


В 1с нет такого типа данных "время". Существует только поле у документа, которое можно задать через функцию УстановитьВремя().


 
Ослик   (2008-05-28 16:14) [20]

Вариант которым я всегда пользовался, это в SQL запросе привести к тексту.
Например:
CONVERT(VARCHAR, GETDATE(), 108)
вернет только время ввиде текста "ЧЧ:ММ:СС"


 
Ослик   (2008-05-28 16:18) [21]

В [20] был ответ к [18] Knight ©   (28.05.08 15:14)

[19] tesseract ©   (28.05.08 16:11)

> Если ты в индексы не попадал, то возможно и медленее. Так,
> запрос через ADO примерно в 5-10 раз быстрее встроенного
> парсера. Иначе бы вопрос не поднимался.

Ты точно говоришь про ДБФ-ки?
Надо будет восстановить в памяти, мне всегда казалось, что с ДБФ-ками 1С работает шестрее всего.
Давно уже забросил все это дело.

По поводу того, как сейчас реализована работа с полями переменной длины в 1С я в курсе.


 
tesseract ©   (2008-05-28 16:21) [22]


> Надо будет восстановить в памяти, мне всегда казалось, что
> с ДБФ-ками 1С работает шестрее всего.


Прямой запрос быстрее намного. Про SQL вообще молчу, скорость выборки астрономическая по сравнению с 1с-вскими запросами. Десятки раз.


 
Knight ©   (2008-05-29 11:47) [23]

Данные идут... осталось добить процедуры.

Может кто в курсе как передать из 1с параметр типа datetime?

Ошибка: ADODB.Command: Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.


 
Ослик   (2008-05-29 12:03) [24]

[23] Knight ©   (29.05.08 11:47)
Я же в [5] написал.
Как-раз дату передаю в параметр @test_date, чтоб такого вопроса не возникло. :)


 
Knight ©   (2008-05-29 12:09) [25]

> [24] Ослик   (29.05.08 12:03)

У тя Date (7) а у меня datetime (135)


 
Ослик   (2008-05-29 12:12) [26]

[25] Knight ©   (29.05.08 12:09)
Процедура выглядит вот-так:
CREATE PROCEDURE [cas].[test_sp]
(
   @test_string NVARCHAR(50),
   @test_date  DATETIME
)
AS
 RETURN 100


так что все-таки datetime.


 
Knight ©   (2008-05-29 14:40) [27]

Всё-равно пищит, что несовпадение типов :(



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.012 c
15-1211938701
DimonS
2008-05-28 05:38
2008.07.13
Знатокам Access. Рухнула база (похоже).


2-1213341653
Dmitry
2008-06-13 11:20
2008.07.13
Canvas


2-1213621632
snake-as
2008-06-16 17:07
2008.07.13
Простая хэш - функция


2-1211262319
grav
2008-05-20 09:45
2008.07.13
IBDataSet, Master-Detail и Insert


15-1211742484
Заинтересованный
2008-05-25 23:08
2008.07.13
Стоимость разработки пакета, аналогичного SynEdit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский