Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с типом Comp 
:(
    Опции темы
Napalm
  Дата 20.5.2005, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 4.3.2004

Репутация: нет
Всего: нет



Есть БД в полях таблиц которой активно используется тип комп. Подключаюсь к БД через ODBC. Задача простая: есть id записи в стринге (в базе это поле тип comp), изменить значения неких полей и проапдейтить. Делал 2мя способами

1. AdoCommand

внутри

update katmc k set zapasmin=:min,zapasmax=:max
where nrec=:nrec

вызов из программы
Код

      minmax.Parameters.ParamByName('nrec').Value:=mas1[i,0];
      minmax.Parameters.ParamByName('min').Value:=min;
      minmax.Parameters.ParamByName('max').Value:=max;
      minmax.Execute;


проблема вылазит когда nrec (в базе тип comp, а массив строки) больше 14 символов. програма вываливается с ошибкой

2. вариант через AdoQuery

запрос
select convert(nrec,sql_char)+'' as nrec,name,tnved,zapasmin,zapasmax from katmc

конвер нужен, иначе возвращает ботву с плавающей запятой с которой работать потом невозможно.

вызов
Код

         datasource1.DataSet.Locate('nrec',mas1[ii,0],[loCaseInsensitive]);
          datasource1.DataSet.edit;
          datasource1.DataSet.FieldByName('zapasmin').AsFloat:=min;
          datasource1.DataSet.FieldByName('zapasmax').AsFloat:=max;
          datasource1.DataSet.Post;



вроде как работает. однако при большом кол-ве повторений в цикле (а нигда и на первой записи) вываливает ошибку. то говорит что не может проапдейтить НЕСКОЛЬКО записей одновременно, то ругается на ключ. nrec - первичный ключ. остальные поля в индексы не входят.


вопрос в следующем как сие чудо побороть... мало того что второй способ очень медленный, так еще оба способа и ненадежные. может кто подскажет или как побороть или компонент какой другой использовать, или как мне это подправить???
PM MAIL   Вверх
<Spawn>
Дата 21.5.2005, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 2
Всего: 64



Цитата
НЕСКОЛЬКО записей одновременно


Ты уверен, что nrec у тебя первичный ключ? Такой ошибки не должно быть, если бы он был действительно уникальным. Попробуй этот код и скажи результаты:

Код

SELECT nrec 
  FROM katmc
GROUP BY nrec
HAVING Count(nrec) > 1


И еще одно. Я не работал с типом Comp. Что он из себя представляет? Вещественные значения? Если так, то почему бы тебе при обновлении в первом случае не пользоваться своей конвертацией, которую ты уже сам написал? Т.е. приведи сравниваемые данные явно к одному типу. Что то типа этого:

Код

update katmc k set zapasmin=:min,zapasmax=:max 
where convert(nrec,sql_char)=:nrec


Это сообщение отредактировал(а) <Spawn> - 21.5.2005, 06:00


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Vit
Дата 23.5.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Типа Comp в базах данных вроде нет, по крайней мере как стандартного (кстати не указана базы данных) и стандартные средства доступа типа BDE/ODBC/ADO могут его некорректно делать, советую явно его приводить


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.