Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать значение поля(тип счетчик) после Insert 
V
    Опции темы
chip_and_dayl
Дата 17.12.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

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



Есть таблица такого вида:

cCode     cName   

CCode-счетчик, сName - String;

Есть код, после выполнения которого, мне нужно узнать, какое значение было присвоено полю cCode
Код

  DataModule1.ADOQuery1.Close;
  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Add('INSERT INTO Client (cName) VALUES (''' + Edit2.Text + ''')');
  DataModule1.ADOQuery1.ExecSQL;


Вариант ответов типа: поменять тип поля cCode на целое число и самому генерировать ИД(Код), а также делать запрос вида: SELECT cCODE from Table_N where cName=''Edit1.Text'' не устраивают



--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Gudinya
Дата 17.12.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Во первых:
Цитата
(''' + Edit2.Text + ''')
 - это ужасный стиль, используй параметры квери(в справке к делфи все есть TParameters)
во вторых: для получения айдишника 
Код

INSERT INTO Client (cName) VALUES ('NEW_TYPE') returning CCode into :vCodeID;

PM MAIL ICQ   Вверх
Frees
Дата 17.12.2009, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



Код

  DataModule1.ADOQuery1.Close;
  DataModule1.ADOQuery1.SQL.Clear;
  DataModule1.ADOQuery1.SQL.Add('INSERT INTO Client (cName) VALUES (''' + Edit2.Text + ''') returning CCode');
  DataModule1.ADOQuery1.ExecSQL;
 DataModule1.ADOQuery1.FieldByName('CCode').asInteger;



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Данкинг
Дата 17.12.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Т.е. этот "returning" в Access прокатит? (извиняюсь, пробовать сейчас неохота).


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
chip_and_dayl
Дата 17.12.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

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



Забыл сказать, что использую СУБД Access, поэтому запрос, что выше не возможен

Добавлено @ 15:31
Данкинг
ммм, как ты узнал, что Аксес? :)

Это сообщение отредактировал(а) chip_and_dayl - 17.12.2009, 15:32


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Frees
Дата 17.12.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

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



chip_and_dayl,  в drkb статья "Как узнать номер автоинкремента при вставке новой записи?" drkb.ru


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Akella
Дата 17.12.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



База локальная или многопользовательская? Может
Код

Select Max(ID) from table1

PM MAIL   Вверх
chip_and_dayl
Дата 17.12.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

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



Akella
Дво-пользовательская:)

Одни словом писал дополнительный SQL-запрос который находит тот ИД

Код

 DataModule1.QClient.Close;
  DataModule1.QClient.SQL.Clear;
  DataModule1.QClient.SQL.Add('select max(cCode) as tCode from Client where cName=''' + Edit2.Text + '''');
  DataModule1.QClient.Open;


Добавлено через 1 минуту и 10 секунд
Я думал может какое-то свойство ADoQuery хранит внесенные значения в БД, но как оказалось нету


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
ТоляМБА
Дата 17.12.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

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



chip_and_dayl, в том то и дело что если база многопользовательская (более одного пользователя) на этом запросе можно словить грабли. Причем словить можно через 5 минут а можно и через месяц или год. Когда возникнет ситуация что оба пользователя одновременно добавят запись, не будут же они совещаться каждый раз при добавлении.
PM   Вверх
chip_and_dayl
Дата 17.12.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

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



ТоляМБА
Ммм, так я там не зря добавил условие 

Код

where cName=''' + Edit2.Text + ''''


Я сомневаюсь, что одновременно два пользователя будут добавлять одно и то же название, да еще при условие что название будет тютенька в тютеньку :)


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
ТоляМБА
Дата 17.12.2009, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

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



Цитата(chip_and_dayl @  17.12.2009,  21:07 Найти цитируемый пост)
Я сомневаюсь

Цитата
Закон Мерфи. Если какая-нибудь неприятность может случиться, она случается.


Если база многопользовательская, то логично предположить что ведется логирование. Тогда в условие запроса можно ещё добавить что-то типа AND User_ID=CurrentUser. То есть вывести максимальное ID где cName=''' + Edit2.Text + '''' введённое именно этим пользователем.
PM   Вверх
Akella
Дата 18.12.2009, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Название будет разное, а ID получится одинаковый.
PM MAIL   Вверх
Romikgy
Дата 20.12.2009, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



Код

SELECT @@IDENTITY

http://msdn.microsoft.com/en-us/library/aa...fice.10%29.aspx

Это сообщение отредактировал(а) Romikgy - 20.12.2009, 01:42


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
chip_and_dayl
Дата 20.12.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

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



Romikgy
Я в прошлый раз смотрел в сторону глобальной переменной @@Identity, но так и не дошло как оно работает. Сегодня осенило, спс

Это сообщение отредактировал(а) chip_and_dayl - 20.12.2009, 11:46


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Romikgy
Дата 21.12.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

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



chip_and_dayl, мои те поздравления , что осенило smile 
удачи в освоении дельфи...


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0921 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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