Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
X-Cite Member Откуда: Минск Сообщений: 1810 |
Добрый день. Пишу в этот подфорум т.к. имеем дело с MSSMS. Может те, кто писал Addin и др. сталкивались... Интересует описание форматов используемое в Microsoft SQL Server Management Studio. Например при перетаскивании Хранимки в окно запроса мы получаем [схема].[хранимка] т.е. в интерфейсе IDataObject для метода GetData FORMATETC.cfFormat = 13 (CF_UNICODETEXT) Если я перетаскиваю в свое приложение и обрабатываю как CF_UNICODETEXT то также получаю [схема].[хранимка] Также у IDataObject есть метод EnumFormatEtc который позволяет получить список всех поддерживаемых форматов. Для Хранимки мы получим 0x01 (1), 0x0D (13), 0xC493 (50323). Где 0x01 - это обычный текст, 0x0D - это текст в Юникоде. А вот что за формат 0xC493 и где про него почитать, какова его структура, и что я могу получить используя его? Методом тыка нашел что примерно на 36 байте лежит 4 байта размер строки и далее строка вида [схема].[хранимка] Если также перетаскивать таблицу, то получим к этим трем форматам еще один 0xC499. |
17 мар 15, 19:27 [17396394] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
X-Cite, тип объекта? |
17 мар 15, 22:24 [17396902] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1810 |
Это вопрос или предположение? Перетаскиваю Drag&Drop хранимку из обозревателя объектов. |
||
17 мар 15, 23:03 [17396986] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8301 |
X-Cite, это число - тип объекта или ID, попробуйте другие типы/процедуры перетаскивать. |
17 мар 15, 23:49 [17397077] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1810 |
Это не тип. Это формат зарегистрированной структуры, которую можно получить через IDataObject. Сама структура мне не известна. Это может например, что то вроде (взято от балды): Unknown = record aSize: Integer; aCount: Integer; aServerLength: Integer; aServer: Pointer; aNameLength: Integer; aName: Pointer; end; По этому идентификатору я получаю указатель по которому лежит некая структура, формат которой мне не известен. Для 0x0D это просто указатель на PChar (нуль-терминированная строка). Я порылся в MSDN но не нашел ничего.. может кто сталкивался или в курсе внутренних возможностей mssms... Завтра буду пробовать различные вариации перетаскивания и сравнивать наборы байт, чтобы искать различия, тем самым методом тыка восстанавливать часть структуры... |
||
18 мар 15, 00:16 [17397133] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
X-Cite, а вы что хотите получить то при перетаскивании ХП? Я вот тут - 17370737 разбирался с форматом буфера обмена, по умолчанию, при копировании из любого места, в т.ч. из студии, DataObject содержит три формата: Text, UnicodeText, System.String. Все они содержат идентичный текст, так что, ИМХО, можно пользоваться любым. |
18 мар 15, 10:32 [17397999] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1810 |
Ага.. значит третий это String... Что ж, печаль. Вообще я думал получить текст ХП по ее имени. Но в клиентском приложении надо чтобы был установлен коннекшн. Я думал что IDataObject обеспечивает информацией кроме названия ХП еще и откуда она, т.е. сервер/бд. Чтобы коннекшн генерировать на лету в зависимости с какого сервера и бд перетянута ХП. |
||
18 мар 15, 15:04 [17400017] Ответить | Цитировать Сообщить модератору |
X-Cite Member Откуда: Минск Сообщений: 1810 |
function TDragTarget.Drop(const dataObj: IDataObject; grfKeyState: Integer; pt: TPoint; var dwEffect: Integer): HResult; var EnumFORMATETC: IEnumFORMATETC; FormatList: array[0..255] of FORMATETC; Cnt: Longint; begin Result := S_OK; ZeroMemory(@FormatList, SizeOf(FormatList)); dataObj.EnumFormatEtc(DATADIR_GET, EnumFORMATETC); EnumFORMATETC.Reset(); EnumFORMATETC.Next(256, FormatList, @Cnt); end; В массив FormatList собственно я получаю 3 структуры в момент отпускания при перетаскивания ХП из студии в свое приложение. typedef struct tagFORMATETC { CLIPFORMAT cfFormat; DVTARGETDEVICE *ptd; DWORD dwAspect; LONG lindex; DWORD tymed; } FORMATETC, *LPFORMATETC; (50323, nil, 1, -1, 1), (13, nil, 1, -1, 1), (1, nil, 1, -1, 1) Так вот для 50323 это какой-то внутренний собственный формат студии в котором она отдает не только имя перетаскиваемого объекта, но и еще дополнительную инфу. А судя по вашему объяснению, это формат хранения System.String |
18 мар 15, 15:12 [17400099] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |