Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 14.03.2014
Сообщений: 64

Сделать, чтобы к каждому id принадлежала Фамилия работника

26.03.2014, 15:28. Показов 1092. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день , имеется база и процедура , в процедуру записывается id и оно фиксирует время прихода , при повторном вводе фиксирует время ухода , проверяет по фио и дате. Нужно сделать , чтобы к каждому id принадлежала Фамилия работника, то есть я ввожу ид , а фамилия записывается автоматически. И ещё , как потом эту процедуру перенести на windows forms .

Код базы
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
USE [Test]
GO
 
/****** Object:  Table [dbo].[TestTable]    Script Date: 22.03.2014 16:24:47 ******/
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[TestTable](
    [Id] [INT] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
    [IncomingTime] [datetime] NOT NULL,
    [LeaveTime] [datetime] NULL,
 CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
 
GO
Код процедуры
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE ToggleWorker 
    @id INT
AS
BEGIN
DECLARE @COUNT INT;
DECLARE @Name nvarchar(50);
WITH T AS
(SELECT top 1 [Id]
      ,[Name]
      ,[IncomingTime]
      ,[LeaveTime]
  FROM [dbo].[TestTable]
  WHERE id = @id
  ORDER BY [IncomingTime])
 
  SELECT @COUNT = COUNT(*),
        @Id = MAX(Id)
  FROM T
  WHERE [LeaveTime] IS NULL
 
  IF @COUNT = 0
    INSERT INTO [TestTable] ([Name], [IncomingTime])
    VALUES (@id, GETDATE())
  ELSE
    UPDATE [TestTable]
    SET [LeaveTime] = GETDATE()
    WHERE Name = @Name
END
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2014, 15:28
Ответы с готовыми решениями:

Как сделать чтобы ячейка с числом, принадлежала ячейке с текстовым форматом
на листе 2 есть два столбца предметы и часы (скрин1), данные для них всегда разные и берутся из разных документов, на обоих стоит...

Открыть карточку работника, чья фамилия выделена на первой форме
Доброго времени суток, форумчане! К сожалению недельный поиск по просторам интернета и этого форума в частности, так и не дал мне ответа...

Как сделать чтобы фамилия из листа отображались в combobox
На листе Excel написаны все Фамилия. Есть форма в котором есть combobox,как сделать чтобы фамилия из листа отображались в combobox?

12
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
26.03.2014, 15:44
чуть по нормализации косяки
1) создай таблицу Personal(id, FIO)
2) таблица учета рабочего времни измени WorkTime(idWorkTime, IncommingTime, LeaveTime, idPersonal)
ну а дальше элементарным и запросами думаю сам навояешь

а с хранимкой в делфи через компонент ADOStoredProc работай
0
0 / 0 / 0
Регистрация: 14.03.2014
Сообщений: 64
26.03.2014, 18:20  [ТС]
nixon93nixon, дело в том , что с этой процедурой мне помогли , сам не наваяю) , если можно по-подробней !
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
26.03.2014, 18:31
для начала сделай/переделай таблицы
чтобы выбирать сотрудника по его id вот скриптик
SQL
1
SELECT fio FROM personal WHERE id = @id
но в общем не понимаю зачем тебе так, обычно юзеру предоставляется компбобокс какой-нибудь куда вы запросом выводите фамилии, а ключом является id, юзер выбирает фамилию, а, в данном случае, в процедуру параметром заноситься id
ну ладно, это все романтика)
скрипт на выборку фио есть
процедура есть, не вижу проблем, элементарных знаний должно хватать, а вопросы по конкретнее задавай, по возможности отвечу
0
0 / 0 / 0
Регистрация: 14.03.2014
Сообщений: 64
26.03.2014, 21:40  [ТС]
nixon93nixon, Здесь предполагается , что человек приходит на работу, вводит ид и фиксируется время во сколько он пришёл , при повторном вводе фиксируется , что он ушёл!
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
26.03.2014, 22:18
понял
ну тогда в textedit вводят пускай свой id,
по нажатию кнопки, если такой id существует в бд, в процедуру этот айди и передается, ну и все как-бы

Добавлено через 7 минут
проверка на существование

в adoquery такой скрипт
SQL
1
SELECT 1 FROM personal WHERE idPersonal = :idPersonal
текст кода в делфи
Delphi
1
2
3
4
5
6
7
8
9
10
qCheckID.Close;
qCheckID.Params.ParamValues['idPersonal'] := StrToInt(textedit1.text);
qCheckID.Open;
if qCheckID.IsEmpty then
begin
MessageDlg('Сотрудника с таким ID не существует', mtError, [mbOk], 0);
Exit;
end;
spToggleWorker.Params.ParamValues['id'] := StrToInt(textedit1.text);
spToggleWorker.ExecSQL;
ну, за чистоту кода от ошибок не ручаюсь, через телефон

Добавлено через 1 минуту
ну думаю, try-except-ы соорудишь сам
0
0 / 0 / 0
Регистрация: 14.03.2014
Сообщений: 64
26.03.2014, 23:54  [ТС]
nixon93nixon, мне бы код c#/vb
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
27.03.2014, 09:10
Извини, в шарпе не силен, основы только знаю, как с бд через ADO работать не знаю
0
0 / 0 / 0
Регистрация: 14.03.2014
Сообщений: 64
27.03.2014, 17:43  [ТС]
nixon93nixon, Вообщем вот сделал 2 таблицы как ты и говорил , я сделал ввод id в таблице Personal в ручную , дабы записать туда нужные мне id. В таблице worktime , мне нужно чтобы я вводил этот id из таблицы Personal , поэтому я сделал его null . Помоги сделать, чтобы в столбец workdate записывалась сегодняшняя дата. И процедуру которая проверяла бы вводили ли сегодня уже id , если id вводится 1 раз , то время заносится в ячейку incommingtime , если 2 раз , то в ячейку leavetime. Если сделал не так как ты имел ввиду , то поправь !

SQL
1
2
3
4
5
6
7
8
9
10
11
12
CREATE DATABASE TABEL
USE TABEL
CREATE TABLE Personal
(id INT NOT NULL PRIMARY KEY,
FIO VARCHAR(MAX) NOT NULL)
 
CREATE TABLE worktime
(idworktime INT NOT NULL PRIMARY KEY IDENTITY(1,1),
workdate datetime NULL,
incommingtime datetime NOT NULL,
leavetime datetime NULL,
id INT  NULL FOREIGN KEY REFERENCES Personal(id))
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
27.03.2014, 18:21
тебе сегодня обязательно или завтра можно сделать, сейчас просто убегаю, времени нет?

Добавлено через 6 минут
и зачем тебе в таблице worktime поле workdate?
у тебя и так два столбца дублирующих эту информацию

Добавлено через 38 секунд
ну по крайней мере один: incommingdate
0
0 / 0 / 0
Регистрация: 14.03.2014
Сообщений: 64
27.03.2014, 18:25  [ТС]
nixon93nixon, нужно просто потом выводить отчёт , в котором будет дата и сколько он за эту дату проработал времени , например 27.03.2014 7часов, можно завтра , сможешь сделать это?
0
 Аватар для nixon93nixon
63 / 63 / 21
Регистрация: 08.02.2013
Сообщений: 262
27.03.2014, 18:27
ну так будешь по incomingdate брать, отсчет его рабочего времени то начнется с того момента как он на работу пришел, разве нет?

Добавлено через 32 секунды
не, ну мое дело совет дать, работать то будет и с этим полем, просто зачем лишняя нагроможденность
0
0 / 0 / 0
Регистрация: 14.03.2014
Сообщений: 64
27.03.2014, 18:29  [ТС]
nixon93nixon, ну да , ты прав) во сколько ты завтра будешь примерно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2014, 18:29
Помогаю со студенческими работами здесь

Как сделать, чтобы каждому значению Х соответсвовал оттенок серого
Добрый день! Задача: значение переменной Х находится в диапазоне . При Х=0 Сolor Y=Сolor.black При Х=300 Сolor Y=Сolor.white ...

Есть две таблицы: Должность и Работники. Необходимо сделать так, чтобы выводило в поле Edit должность работника
Возможно ли это осуществить? Проблема в том, что на каждого работника выводит только одну должность - первую (официант). Если бы можно было...

Как сделать так, чтобы вместо кода клиента отображалась его фамилия?
Здравствуйте, помогите пожалуйста.Есть 2 таблицы они связаны. Как сделать так,чтобы вместо кода клиента отображалась его фамилия.Код...

Класс name, включающий в себя данные (имя, фамилия, отчество и номер работника). Зацикливание при чтении файла
#include <iostream> #include <string> #include <fstream> #include <locale.h> using namespace std; int kol; int cl =...

Как сделать так, чтобы к каждому новому пользователю подцеплялся автоматически сетевой диск с именем пользователя?
Есть ВМ AD Нужно сделать так, чтобы к каждому пользователю подцеплялся свой сетевой диск с логином пользователя. Как это реализовать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru