MAV Direct ODBC

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Гость

Re: Insert, Identity

Сообщение Гость »

Арсений писал(а):
Tolmachev Igor писал(а): Значение, которое вернул запрос - в этом поле
пример запроса: Select @@identity
Спасибо. А как в программе пощупать это значение после добавления?
После MAVINSERT вставь в EMBED
MESSAGE('Это поле='&ЭтоПоле) ! Увидишь на экране телевизора :)
или
dbfiles.write('Это поле='&ЭтоПоле) ! Увидишь в трассе (включить MAVTrace до запуска прораммы)
Арсений

Re: Insert, Identity

Сообщение Арсений »

Anonymous писал(а):После MAVINSERT вставь в EMBED
MESSAGE('Это поле='&ЭтоПоле) ! Увидишь на экране телевизора :)
или
dbfiles.write('Это поле='&ЭтоПоле) ! Увидишь в трассе (включить MAVTrace до запуска прораммы)
Ха! Вон как! Ларчик то просто открывался, а я то что-то даже и попробовать не додумался, думал, значение надо выгребать откуда-то из неведомых глубин :)
Tolmachev Igor

Re: Insert, Identity

Сообщение Tolmachev Igor »

Арсений писал(а):
Anonymous писал(а):После MAVINSERT вставь в EMBED
MESSAGE('Это поле='&ЭтоПоле) ! Увидишь на экране телевизора :)
или
dbfiles.write('Это поле='&ЭтоПоле) ! Увидишь в трассе (включить MAVTrace до запуска прораммы)
Ха! Вон как! Ларчик то просто открывался, а я то что-то даже и попробовать не додумался, думал, значение надо выгребать откуда-то из неведомых глубин :)
В библиотеке, что в классах, что в шаблонах, вообще, всё не очень сложно, во всяком случае спрашивайте - постараюсь помочь.
Сразу: ИСПОЛЬЗУЙТЕ ТРАССУ (MAVTRACE) - добавляйте свои сообщения - очень способствует пониманию, где набедокурил...и что происходит. И потом, эти трассировочные сообщения из из сырцов можно не удалять - на скорость в боевом режиме работы проги не влияет, т.к. конечному пользователю включить трассу на его компе - можно только от большой любви к нему.
Арсений

Re: Insert, Identity

Сообщение Арсений »

Tolmachev Igor писал(а): Сразу: ИСПОЛЬЗУЙТЕ ТРАССУ (MAVTRACE) - добавляйте свои сообщения -
Спасибо за предыдущие ответы.

Еще вопросик: а как эту самую трассу включать?

т.е. понятно, забодим объект класса MavTrace, а что, он умеет что-то самомтоятельно отслеживать?
Арсений

Сообщение Арсений »

И истчо один вопрос: MAV аналоги GET и NEXT? Есть ли они и как работают? Как можно найти и обновить уже существующую запись?

И еще вылез один момент: не получается добавить запись с IDENTITY-полем и с остальными пустыми полями. При попытке добавления получаю вот такую ошибку:

[170] [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ')'. (42000)
SQL Statement - INSERT INTO dbo.EditLimits) VALUES()
Tolmachev Igor

Re: Insert, Identity

Сообщение Tolmachev Igor »

Арсений писал(а):
Tolmachev Igor писал(а):
Еще вопросик: а как эту самую трассу включать?

т.е. понятно, забодим объект класса MavTrace, а что, он умеет что-то самомтоятельно отслеживать?
Включать его можно ручками в файл WIN.INI
[MAV Direct ODBC]
Trace=True
File=D:\zzz_trace.txt
Delete=True
ShowRecordBuffer=True

Но лучше использовать из поставки в примерах прогу MAVTrace
Собери проект - получишь exe - вынеси ярлык на панель быстрого запуска - удобно пользоваться (вкл/выкл трассу)
Tolmachev Igor

Сообщение Tolmachev Igor »

[quote="Арсений"]И истчо один вопрос: MAV аналоги GET

MyFile.PrimaryField1 = AnyValue1
MyFile.PrimaryField2 = AnyValue2
IF MAVGET(MyFile)
! Запись по первычным полям не найдена
ELSE
! Запись найдена
END
Tolmachev Igor

Сообщение Tolmachev Igor »

[quote="Арсений"]И истчо один вопрос: MAV аналоги GET и NEXT?

Пример процедуры загрузки таблицы в очередь на клиенте
LoadMyFileToQue PROCEDURE()
Loc_Que_MyFile QUEUE,PRE(Loc_Que_MyFile)
REC LIKE(MyFile)
END
CODE
FREE(Loc_Que_MyFile)
IF NOT LoadQueFromTable(Loc_Que_MyFile, MyFile)
MESSAGE('Вся SQL-таблица загружена в аналогичную ей очередь')
END


LoadQueFromTable FUNCTION (*queue que,*group rTable) ! Declare Procedure
ps mavselect
code
ps.init(100,0) ! Читать с сервака блоками по сто записей
ps.bindfields(rTable,rTable) ! Читать все поля таблицы (известные словарю)
if ps.run()
mavshowerror
return 1
end
! Выборка записей возвращаемых запросом
loop
if ps.fetch()
if errorcode() and errorcode() ~= NoRecErr
mavshowerror ! Ошибка чтения
return 1
end
break ! Конец выборки
end
! Удачное чтение

que = rTable
add(que)
if errorcode() then stop(error()).
end
return 0
Tolmachev Igor

Сообщение Tolmachev Igor »

И еще вылез один момент: не получается добавить запись с IDENTITY-полем и с остальными пустыми полями. При попытке добавления получаю вот такую ошибку:

[170] [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near ')'. (42000)
SQL Statement - INSERT INTO dbo.EditLimits) VALUES()[/quote]

Похоже, библиотека неправильно отработала постороение запроса, когда нет полей для добавления (пустые значения и на серваке NULL разрешено по этим полям) - скобки левой не хватает.НО!
Попробуй тоже самое не указывать ни одно поле в Insert через SQL Query Analazer - то же ошибку получишь.

Попробуй задать NOT NULL - библа должна послать "нулевые" значения, соответственно типам данных - думаю ошибка исчезнет.


Но, вообще-то, такая ситуация - добавлять полностью пустые записи (все поля NULL), кроме автосчётчика (который заполнит сервак)- немного надумана, но интересен живой пример - это для чего такая таблица?
Арсений

Сообщение Арсений »

Tolmachev Igor писал(а):Но, вообще-то, такая ситуация - добавлять полностью пустые записи (все поля NULL), кроме автосчётчика (который заполнит сервак)- немного надумана, но интересен живой пример - это для чего такая таблица?
Спасибо за советы. А с пустыми записями - дык это редкий случай, да и то, только на этапе написания возникает - просто проверки :)

Если можно, еще посоветуйте. Тип данных SQL datetime, при импорте таблицы превращается в группу, но библиотека с этой группой работать не хочет, сделал так:

myfile
....
datetime string(8)
end

datetimegroup group
date date
time time
end

datetimegroup.date = today()
datetimegroup.time = time()

myfile.datetime = datetimegroup

Но это наверное кривость?

И еще, а есть ли средства синхронизации словаря и таблиц SQL?
Tolmachev Igor

Сообщение Tolmachev Igor »

Арсений писал(а):И еще, а есть ли средства синхронизации словаря и таблиц SQL?
Можно использовать стандартную синхронизацию, но IMHO убогий режим.Я его если использую, то только для первоначальной заливки sql таблицы в словарь. Далее при изменении наименования или атрибутов поля таблицы (или удаления и добавления полей) на сервере, повторяю те же изменения в словаре. Тем более что в словаре, кроме первичного ключа таблицы остальные реальные ключи не нужны вообще.
Арсений

Сообщение Арсений »

Tolmachev Igor писал(а): Далее при изменении наименования или атрибутов поля таблицы (или удаления и добавления полей) на сервере, повторяю те же изменения в словаре.
Понятно. Делаю так же. Но хотелось бы как-то автоматизировать процесс.
Tolmachev Igor

Сообщение Tolmachev Igor »

[quote="Арсений]
Тип данных SQL datetime, при импорте таблицы превращается в группу, но библиотека с этой группой работать не хочет...
[/quote]

С датами работать наоборот удобнее...
Надо было стандартный метод соответствия данных оставить, н-р:
на SQL
myfile
MyFileID int IDENTITY(1,1)
DT datetime
end

в DCT
myfile, PRE(MyFile)
MyFileID long ! флажок ReadOnly = 1 т.к. identity
DT string(8)
DT_GROUP,OVER(DT)
DT_DATE DATE
DT_TIME TIME
END
end

в CODE
...
MyFile.DT_DATE = TODAY()
MyFile.DT_TIME = CLOCK()
! Дата установленная на клиенте
! Может лучше с сервака брать ?

! Всего одна строка, хотя... задачи разные бывают

if mavload('select getdate()',MyFile.DT_GROUP).


IF MAVINSERT(MyFile)
MAVSHOWERROR('Ошибочка!')
END
Арсений

Сообщение Арсений »

Tolmachev Igor писал(а):
в DCT
myfile, PRE(MyFile)
MyFileID long ! флажок ReadOnly = 1 т.к. identity
DT string(8)
DT_GROUP,OVER(DT)
DT_DATE DATE
DT_TIME TIME
END
endEND
АААА! Моя стандартная невнимательность. Группу в словарь уже руками добавлял. И запыл прописать ей OVER - вот и не работало. Спасибо.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Арсений писал(а):1. Что значит "Ознакомительная версия"? Могу ли я использовать ее в своих проектах?
2. Если нет, то что я должен для этого сделать?
3. Есть ли русская версия шаблонов?
Библиотека действительно платная.
Постоянно развивается, официальные пользователи получают инфо об upgrade, online тех поддержка, фиксация найденых багов, реализация интересных предложенных идей.

Почему выложена полная версия, пользуйтесь ради бога, просто я хотел дать представление о продукте, без поседующих дополнений и расширений. На вопросы об использовании по возможности конечно отвечу, на вопросы типа как сделать вот такую фичу, либо как построить Browse по таблице не описанной в словаре но при использоввании BrowseBox шаблона, а по произвольносу SELECT запросу, так добро пожаловать в официальные пользователи ;)
Ответить