Название: MSSQL(ODBC) поле как переменная в запросе Отправлено: ParanoidAndroid23 от Февраль 02, 2010, 00:41 Уважаемые господа ! :)
Подскажите пожалуйста, есль ли возможнось подставить в запросе поле как переменную ? Код: QString F,string1,ID; На что мне сервер отвечает : [Microsoft][ODBC SQL Server Driver][SQL Server]String or binary data would be truncated. [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated. При указании в запросе поля все работает. Сразу оговорюсь, что я начинающий и я только начал осваивать данные прелести. Название: Re: MSSQL(ODBC) поле как переменная в запросе Отправлено: voronElf от Февраль 02, 2010, 06:53 Скорее всего имя поля через bind подставляется как строковое значение и отсюда ошибка. Попробуй имя поля не через bind вставлять, а просто строковыми операциями
Код: QString F,string1,ID; Название: Re: MSSQL(ODBC) поле как переменная в запросе Отправлено: ParanoidAndroid23 от Февраль 02, 2010, 16:41 Скорее всего имя поля через bind подставляется как строковое значение и отсюда ошибка. Попробуй имя поля не через bind вставлять, а просто строковыми операциями Код: QString F,string1,ID; Огромное спасибо ;D . Я тоже нашел обход этой ситуации , но ваша конструкция мне нравится в 100 раз больше ;) Название: Re: MSSQL(ODBC) поле как переменная в запросе Отправлено: voronElf от Февраль 03, 2010, 07:37 Рад что помог, а идеей своего обхода поделитесь ?
Название: Re: MSSQL(ODBC) поле как переменная в запросе Отправлено: ParanoidAndroid23 от Февраль 04, 2010, 10:08 Код: query.exec("UPDATE gcActiveTable SET "+F+" = '"+string1+"' WHERE ID = '"+ID+"' AND Number = '"+Number+"'"); Как начинающий , ничего более умного придумать не смог. Но в этом сложнее найти ошибку если она будет. Хотя дэбагер спасает ;D Название: Re: MSSQL(ODBC) поле как переменная в запросе Отправлено: voronElf от Февраль 05, 2010, 07:12 Да в общем-то тот же подход, вполне нормально, формируем строку запроса ручками. Просто через .arg(...) вставлять в строку значения переменных чуть поудобнее и понагляднее ;)
Название: Re: MSSQL(ODBC) поле как переменная в запросе Отправлено: Amigo_sa от Февраль 05, 2010, 09:32 Код: query.exec("UPDATE gcActiveTable SET "+F+" = '"+string1+"' WHERE ID = '"+ID+"' AND Number = '"+Number+"'"); Доброе утро! Хотел бы обратить ваше внимание, что таким образом формировать запрос крайне опасно. тут (http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0) рассказано почему. Необходимо все-таки использовать парамтризованные запросы. Название: Re: MSSQL(ODBC) поле как переменная в запросе Отправлено: voronElf от Февраль 05, 2010, 10:04 Хорошее замечание, не могу не согласиться, конечно же bind делает эскапирование в строковых значениях, а при этом подходе делать ручками приходится и можно забыть.
|