
Dmitry
13.04.2016
12:44:18
хотя момент
щас я строку отдельно вынесу, а не в теле запроса это сделаю

Вячеслав
13.04.2016
12:46:05
а. Ну тык ту стринг сделай. У тебя система при добавлении решила все в чар эррэй конвертнуть)

Max
13.04.2016
12:46:36
Эээмм... Справку от драйвера почитай. Очевидно что query явно форматирует строку как printf, и тут дело не в самом касте

Google

Dmitry
13.04.2016
12:48:14
уф... была бы там еще справка...
https://github.com/adamdruppe/arsd/blob/master/database.d
Я вот этот драйвер использую
и mssql.d xnобы к FireBirв подключаться — через ODBC он на удивление заработал

Вячеслав
13.04.2016
12:49:23
А другого способа подключаться к мсскл нет?)

Dmitry
13.04.2016
12:51:28
нет
точнее я не нашел
и мне FireBirв нужен

Вячеслав
13.04.2016
12:51:44
Сам стринг должен быть правильным, да. Дело в драйвере. Или в базе может

Max
13.04.2016
12:51:56
Попробуй что-то вроде
db.query("UPDATE USERS SET USERBLOB = ?0 WHERE ID=1", md.userblob);
Либо ещё вариант использовать SqlBuilder

Dmitry
13.04.2016
12:52:48
мой драйвер разве это умеет?

Вячеслав
13.04.2016
12:53:03
Попробуй просто пока что-то вроде
db.query("UPDATE USERS SET USERBLOB = 1101010 WHERE ID=1");

Dmitry
13.04.2016
12:53:23
щас

Вячеслав
13.04.2016
12:53:29
Там вероятно не в запросе дело

Max
13.04.2016
12:54:38
Не, самого SqlBuilder таки нету, я ошибся, но есть пример реализации https://github.com/adamdruppe/arsd/blob/master/database.d#L163

Google

Pavel
13.04.2016
12:55:34
https://github.com/adamdruppe/arsd/blob/master/database.d#L38 prepared statements походу все же есть

Вячеслав
13.04.2016
12:55:45
Попробуй просто пока что-то вроде
db.query("UPDATE USERS SET USERBLOB = 1101010 WHERE ID=1");

Dmitry
13.04.2016
12:56:33
во, такое вставилось

Вячеслав
13.04.2016
12:57:06
Океей. Тогда сделай предварительно вывод s что оно вставить пытается

Dmitry
13.04.2016
12:58:27
эм, не понял:
string s = "UPDATE USERS SET USERBLOB = 1101010 WHERE ID=1";
db.query(s);
writeln чтоли?

Вячеслав
13.04.2016
12:58:49
Ну да, только там где ту стринг
Ага. А вывод блоба?
Без каста

Dmitry
13.04.2016
13:01:17
так?
string s = "UPDATE USERS SET USERBLOB =" ~ md.userblob ~ " WHERE ID=1";
writeln(s);
?

Вячеслав
13.04.2016
13:01:47
Writeln(md.userblob)
?

Dmitry
13.04.2016
13:04:23
щас момент я вывод ссделал в текстовый файл
оно тупит при открытии
вот так все вывелось

Вячеслав
13.04.2016
13:05:17
А если врайтлн то оно выводит так же?
Тьфу
Я ж сказал отдельно
Без конвертации
Writeln userblob
А ты всю строку)

Google

Dmitry
13.04.2016
13:06:24
щас сделаю writeln(md.userblob);

Вячеслав
13.04.2016
13:06:36
Ага
Давай)

Dmitry
13.04.2016
13:07:02
source\app.d(153,13): Error: incompatible types for (("UPDATE USERS SET USERBLOB =") ~ (cast(const(ubyte)[])md.userblob)): 'const(char)[]' and 'const(ubyte)[]'
ой
момент
щас там закоменчу это старая ошибка

Вячеслав
13.04.2016
13:07:32
Ага
Writeln насколько помню спокойно без конвертации все выводит)

Dmitry
13.04.2016
13:09:00
сори что скрином кидаю, просто файл в 20 метров получается
и блокнот тупит

Вячеслав
13.04.2016
13:11:18
Ну значит у тебя база ждет не байтовый массив)
А его бинарное представление. Или ещё что-то
У тебя userblob имеет какой тип в базе?

Dmitry
13.04.2016
13:12:43
в FireBird вот этот http://www.firebirdsql.org/refdocs/langrefupd21-blob.html

Вячеслав
13.04.2016
13:13:12
Блин. А текстом?

Dmitry
13.04.2016
13:13:43
ну по идее это бинарный формат, щас вот гуглю его структуру

Вячеслав
13.04.2016
13:14:38
Аа
Ну так
Блин

Google

Вячеслав
13.04.2016
13:14:55
У тебя скл ругается
Очевидно
Что там запятая где ее быть не должно

Dmitry
13.04.2016
13:15:53
тоесть байтовый поток должен быть сплошным? 149211949191 типа так?

Вячеслав
13.04.2016
13:16:01
Да нет
Хотя там квадратные скобки. Оно массив воспринимает вообще?
Посмотри как там массив должен писаться в твой файрберж

Dmitry
13.04.2016
13:16:55
оно вот его этот массив именно таким образом переводит
и запятые добавляет с квадратными скобками

Вячеслав
13.04.2016
13:18:22
Посмотри там как записать в файрберд массив. Пример запроса. Мне с телефона влом

Dmitry
13.04.2016
13:18:34
ок щас погуглю

Вячеслав
13.04.2016
13:19:08
Потому что просто скобки оно явно не воспринимает)

Dmitry
13.04.2016
13:19:42
и запятные наверно лишние...
а по какому слову хоть гуглить
я тут драйвер от Go нашел
тут вот такое есть:
+func (p *wireProtocol) opPutSegment(blobHandle int32, seg_data []byte) {

Вячеслав
13.04.2016
13:24:37
http://stackoverflow.com/questions/15841167/how-to-input-an-array-parameter-of-values-to-firebird-stored-procedure
Есть такое предложение но второй чувак, имхо, правильно советует просто писать все в стринг и потом парсить в массив, когда достаешь.

Dmitry
13.04.2016
13:25:22
я не могу, мне именно блоб нужен

Вячеслав
13.04.2016
13:25:36
Зачем?

Dmitry
13.04.2016
13:25:47
я бы в base64 все хранил если бы было можно
тупо на работе софт только с блобами работает

Google

Dmitry
13.04.2016
13:26:30
договориться и поменять что-то невозможно, я бы и БД поменял на sqllite если бы можно было

Вячеслав
13.04.2016
13:26:33
Надо сравнить - сделал ту стринг. Надо достать - сделал ту байт эррэй.
Какая разница что в базе хранится?

0x9d8e
13.04.2016
13:27:15

Вячеслав
13.04.2016
13:27:39
Ну тогда спросить как они это делают

0x9d8e
13.04.2016
13:27:40
И оно этих строк нпоймёт

Dmitry
13.04.2016
13:28:02
Там есть какое-то древний софт на Делфи

0x9d8e
13.04.2016
13:28:37
Мне кажется это нужно делать какой-нибудь sql-функцией уже в базе. То есть передаём строку, а записываем блоб
чет типа update from table field = BLOB('s t r i n g')

Dmitry
13.04.2016
13:29:53
еще есть варианты любые костыльные есть?

Вячеслав
13.04.2016
13:30:08
Да чихать какой софт, вид запроса у них достань на вставку блоба и парси))

0x9d8e
13.04.2016
13:30:51
Ну если их драёвер есть подготовленные запросы, а этот нет, то не поможет
*ест

Вячеслав
13.04.2016
13:31:13
Да блин

Dmitry
13.04.2016
13:31:36
проще уж из питона вытащить тип
https://github.com/geovanisouza92/fdb/search?utf8=%E2%9C%93&q=blob

Вячеслав
13.04.2016
13:31:37
Конечно запрос как выглядит - вот весь вопрос)
Я не нашел как массив просто запросом вставить ибо

0x9d8e
13.04.2016
13:32:51
Мне кажется нет. Ибо запрос может быть вида "field = :value" и отдльным каналом этот value передаваться. А может идти полностью строкой.