Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Clipboards Formats для MSSMS  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Clipboards Formats для MSSMS  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8301
X-Cite,

тип объекта?
17 мар 15, 22:24    [17396902]     Ответить | Цитировать Сообщить модератору
 Re: Clipboards Formats для MSSMS  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1810
Владислав Колосов
X-Cite,

тип объекта?


Это вопрос или предположение?
Перетаскиваю Drag&Drop хранимку из обозревателя объектов.
17 мар 15, 23:03    [17396986]     Ответить | Цитировать Сообщить модератору
 Re: Clipboards Formats для MSSMS  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8301
X-Cite, это число - тип объекта или ID, попробуйте другие типы/процедуры перетаскивать.
17 мар 15, 23:49    [17397077]     Ответить | Цитировать Сообщить модератору
 Re: Clipboards Formats для MSSMS  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1810
Владислав Колосов
X-Cite, это число - тип объекта или ID, попробуйте другие типы/процедуры перетаскивать.

Это не тип. Это формат зарегистрированной структуры, которую можно получить через 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]     Ответить | Цитировать Сообщить модератору
 Re: Clipboards Formats для MSSMS  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
X-Cite, а вы что хотите получить то при перетаскивании ХП?

Я вот тут - 17370737 разбирался с форматом буфера обмена, по умолчанию, при копировании из любого места, в т.ч. из студии, DataObject содержит три формата: Text, UnicodeText, System.String. Все они содержат идентичный текст, так что, ИМХО, можно пользоваться любым.
18 мар 15, 10:32    [17397999]     Ответить | Цитировать Сообщить модератору
 Re: Clipboards Formats для MSSMS  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1810
Minamoto
X-Cite, а вы что хотите получить то при перетаскивании ХП?

Я вот тут - 17370737 разбирался с форматом буфера обмена, по умолчанию, при копировании из любого места, в т.ч. из студии, DataObject содержит три формата: Text, UnicodeText, System.String. Все они содержат идентичный текст, так что, ИМХО, можно пользоваться любым.

Ага.. значит третий это String...
Что ж, печаль.
Вообще я думал получить текст ХП по ее имени.
Но в клиентском приложении надо чтобы был установлен коннекшн.
Я думал что IDataObject обеспечивает информацией кроме названия ХП еще и откуда она, т.е. сервер/бд. Чтобы коннекшн генерировать на лету в зависимости с какого сервера и бд перетянута ХП.
18 мар 15, 15:04    [17400017]     Ответить | Цитировать Сообщить модератору
 Re: Clipboards Formats для MSSMS  [new]
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 Ответить