в модуле родителя должен быть импортирован модуль с классом ребенка"родитель" не должен знать о "ребёнке".
родитель содержит в себе поля класса ребенкаЭто ошибка. Перенесите все поля в "родителя".
родитель это приложение
child'ы это компоненты приложения
Application.CreateForm(TForm1, Form1);
Application.ExeName;
я говорю не о наследовании.Расположите их в одном модуле.
paren:^TParent
- это масло мысленное, так как переменная-объект - это и есть ссылка. Поэтому Proc1(Obj: TMyObject) и Proc1(var Obj: TMyObject)
будут выполняться по-разному. CREATE
(только подставите названия объектов).datetime
в качестве первичного ключа (только сейчас дошло) — не допустимо:CREATE TABLE [dbo].[Table_5](
[ID] [datetime] NOT NULL,
[Name] [varchar](50) NOT NULL,
CONSTRAINT [PK_Table_5] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Table_5] ADD CONSTRAINT [DF_Table_5_ID] DEFAULT (getdate()) FOR [ID]
GO
INSERT INTO Table_5 (Name)
SELECT TOP(5) 'TEST' + CAST(ROW_NUMBER() OVER(ORDER BY id) AS VARCHAR)
FROM sysobjects
Нарушено "PK_Table_5" ограничения PRIMARY KEY.
Не удается вставить повторяющийся ключ в объект"dbo.Table_5".
Повторяющееся значение ключа: (ноя 12 2021 3:06PM).
datetime
1000/300, что должно было бы обеспечить уникальность последовательных значений. Но MS SQL, с помощью timeBeginPeriod
, увеличивает частоту срабатывания таймера до 1000/1000. То есть при записи в datetime
и округления до его точности, значения потеряют уникальность. Это известная коллизия этого типа данных не позволяет использовать его, как первичный ключ. В 1С есть специальная обработка для построения хронологических цепочек (например, что бы различать оплату и аванс относительно отгрузки), которая устанавливает на документах несовпадающее время.1) 1 PK - Int, 2) 1 PK - Datetime, 3) Year, Month - int Composite Key, 4) Year, Month, Day - int Composite Key
datetime
- это int+int
. В первом — дата, во втором — время, которое, исходя из 3 и 4 пункта использовано не будет (и эти пункты излишни, естественно). Если вы хотите использовать дату как первичный ключ — используйте тип данных date
(3 байта). EXE
, как архив (то есть можно найти ресурсы):INSERT INTO sales (Product_idProduct, sale_date, price, [count])
SELECT TOP(100) (RAND(id) * 3) + 1,
DATEADD(dd, - (1000 * RAND(id)), GETDATE()),
(RAND(id) * 100) + 1, (RAND(id) * 10) + 1
FROM sysobjects
ORDER BY id DESC
localhost\Exos9300
. Попробуйте просто Exos9300
. UDL
. То есть создайте пустой файл с этим расширением и запустите его. Data Source=TSK-Home
.osql -S TSK-Home -E -Q "BACKUP DATABASE [ComputerWare] TO DISK = '%BackUp%\ms-sql\ComputerWare.bak' WITH INIT, NOUNLOAD, NAME = 'ComputerWare archive', NOSKIP, NOFORMAT, STATS = 25"
SELECT FacultyName, ISNULL(CN.Co,0)
FROM Faculty
LEFT JOIN (SELECT [Card].FacultyId, COUNT(*) AS Co
FROM [Card]
JOIN Diagnosis ON [Card].CardId = Diagnosis.CardId
JOIN Diagnosies ON Diagnosies.Id = Diagnosis.Diagnosis
WHERE Diagnosies.DiagnosisName = N'грип' AND YEAR(Diagnosis.VisitDate) = 2000
GROUP BY [Card].FacultyId) AS CN
ON CN.FacultyId = Faculty.FacultyID
C:\Windows\WID
.Основные особенности Windows Internal Database:
База данных WID предполагает только локально использование, удаленно к ней подключиться не получится.
Отсутствуют ограничения на размер файлов БД (в отличии от той же редакции SQL Express).
Не требует для своего использования лицензии.
PIVOT
, это в некотором роде группировка. Сделайте запрос по sales
и месяцам. SUM([price] * [count])
будет в ячейках, код продукта по вертикали. Потом добавите во внутренний запрос INNER JOIN
к таблице products
и вместо кода товара можете использовать его наименование.SELECT [Year], [Product], [Январь], [Февраль], [Март],
[Апрель], [Май], [Июнь],
[Июль], [Август], [Сентябрь],
[Октябрь], [Ноябрь], [Декабрь]
FROM
( SELECT YEAR(sale_date) AS [Year],
products.title AS [Product],
DATENAME(MONTH, sale_date) AS [MonthName],
price * count AS SaleSum
FROM sales
INNER JOIN products ON sales.Product_idProduct = products.idProduct) AS enMonth
PIVOT ( SUM(SaleSum)
FOR [MonthName] IN ( [Январь], [Февраль], [Март],
[Апрель], [Май], [Июнь],
[Июль], [Август], [Сентябрь],
[Октябрь], [Ноябрь], [Декабрь])
) AS enPivot
ORDER BY 1 DESC, 2
SET LANGUAGE Russian;
SELECT DATENAME(MONTH, 1), DATENAME(MONTH, 32), DATENAME(MONTH, 60)
Январь Февраль Март
BACKUP DATABASE … TO … WITH INIT
BACKUP DATABASE … TO … WITH DIFFERENTIAL
-- включение xp_cmdshell, запустить ОДИН раз
EXECUTE sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXECUTE sp_configure 'xp_cmdshell', 1;
GO
RECONFIGURE;
GO
-- создание месячного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR (128)
DECLARE @DT VARCHAR(8) = CONVERT( VARCHAR, GETDATE(), 112)
SET @BF = 'MKDIR C:\Temp\' + SUBSTRING(@DT, 1, 4)
+ '\' + SUBSTRING(@DT, 5, 2)
-- создание папки 2021\11
EXECUTE xp_cmdshell @BF
SET @BF = 'C:\Temp\' + SUBSTRING(@DT, 1, 4)
+ '\' + SUBSTRING(@DT, 5, 2)
+ '\Testus.bak'
SET @BN = 'Testus' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH COPY_ONLY, NAME = @BN
-- сжатие
-- BACKUP DATABASE Testus TO DISK = @BF WITH COMPRESSION, COPY_ONLY, NAME = @BN
-- создание ежедневного полного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR (128)
SET @BF = 'forfiles /P C:\Temp /M Testus-* /C "cmd /c DEL @path" /D -5'
-- удаление резервов старше 5 дней
EXECUTE xp_cmdshell @BF
SET @BF = 'C:\Temp\Testus-' + CONVERT( VARCHAR, GETDATE(), 23) + '.bak'
SET @BN = 'Testus-' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH INIT, NAME = @BN
-- создание разностного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR(128)
SET @BF = 'C:\Temp\Testus-' + CONVERT( VARCHAR, GETDATE(), 23) + '.bak'
SET @BN = 'Testus-' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH DIFFERENTIAL, NAME = @BN
бывают еще ручные резервные копииЧтобы не нарушить порядок автоматический резервов, нужно делать резерв с параметром
COPY_ONLY
в специальный файл.-- создание ручного полного резерва
DECLARE @BF VARCHAR(256), @BN VARCHAR (128)
SET @BF = 'C:\Temp\Testus-cp-' + CONVERT( VARCHAR, GETDATE(), 23) + '.bak'
SET @BN = 'Testus-' + CONVERT( VARCHAR, GETDATE(), 121)
BACKUP DATABASE Testus TO DISK = @BF WITH COPY_ONLY, NAME = @BN
всего, меньше от полнойТут всё уже зависит от приложения. На стороне сервера можно лишь сжать базу данных (руководство) и дефрагментировать индексы (руководство). Это повысит плотность и, возможно, уменьшит количество изменённых страниц.
ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }