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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.016 c
3-1201906445
md10
2008-02-02 01:54
2008.07.13
delete record


8-1181560776
hahol_64_rus
2007-06-11 15:19
2008.07.13
оболочки


15-1211813808
БарЛог
2008-05-26 18:56
2008.07.13
php. случайный элемент числового множества


2-1213120133
Riply
2008-06-10 21:48
2008.07.13
Warning, которого быть не должно.


15-1211861704
vajo
2008-05-27 08:15
2008.07.13
как в меню проводника отключаеся "Свойства папки..."?