Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.02.2010, 18:52
Dima Dima вне форума
Прохожий
 
Регистрация: 03.02.2010
Адрес: Нижний Новгород
Сообщения: 12
Репутация: 10
По умолчанию Удаление формы и вопрос по БД

1.Как удалить форму,которая при запуске появляется первой?И из оставшихся выбрать ту,которая будет появлятся после удаления этой формы?

2.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
qtxt:='Select Data,Peni,T.Name '+
' From Tovari t,Vozvrat v,Klienti k '+
' Where t.ID_tov=v.ID_tov and k.ID_kl=v.ID_kl and k.ID_kl='''+FormMain.Edit9.Text+'''';
With Query5 do begin Sql.Clear; Sql.Add(Qtxt); Open; end;
 
while not Query5.Eof do
  begin
  Qtxt:= 'Insert into IstKl(Data,Sum,Deistvie) '+
  'Values ( '''+DateToStr(Query5['Data'])+''','''+IntTostr(Query5['Peni'])+''','''+s3+Query5['Name']+''')';
  With Query1 do begin Sql.Clear; Sql.Add(Qtxt); execSQL; end;
  Query5.Next;
  end;

В строке Query5.Next; выдает ошибку:
Код:
1
2
3
General SQL error.
[Microsoft][ODBC SQL Server Driver][SQL Server]String or binary data would be truncated.
[Microsoft][ODBC SQL Server Driver][SQL Server]The statment has been terminated.

Подскажите в чем тут проблема?
Если нужно,могу выложить весь код.
Ответить с цитированием
  #2  
Старый 14.02.2010, 19:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

1. А нафик вы вообще это так делаете? Все это громадье кода можно засунуть в одну SQL-инструкцию. Примерно так:
Код:
1
2
3
4
5
6
7
Query5.SQL.Text := 'insert into IstKl (Data,Sum,Deistvie)
(select Data,Peni,T.Name from Tovari T
  inner join Vozvrat V on V.ID_tov=T.ID_tov
  inner join Klienti K on K.ID_kl=V.ID_kl
 where K.ID_kl=:ID_kl)';
Query5.Parameters.ParamValue['ID_kl'] := FormMain.Edit9.Text;
Query5.ExecSQL;
2. Если уж вам хочется именно так, то используте параметры для запросов. Меньше ошибок при передаче параметров будет, да и читается намного легче.
3. У вас точно поле ID_kl строковое?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 14.02.2010, 19:32
Dima Dima вне форума
Прохожий
 
Регистрация: 03.02.2010
Адрес: Нижний Новгород
Сообщения: 12
Репутация: 10
По умолчанию

1.Пишу курсовую и чтобы потом не было притензий у преподавателя,делаю по его шаблонам.
ID_kl поле int,но это вроде ничего не меняет.

Всеже выложу весь юнит:
Код:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
procedure TFormIstKl.FormActivate(Sender: TObject);
var s1,s2,s3:string;
begin
s1:='Âçÿë òîâàð:';
s2:='Ïîïîëíèë ñ÷åò';
s3:='Óïëàòèë ïåíè çà òîâàð:';
Label1.Caption:=FormMain.Edit2.Text+' '+FormMain.Edit3.Text+' '+FormMain.Edit4.Text+' ';
Qtxt:= 'Create table IstKl (Data datetime,Sum numeric,Deistvie varchar(20)) ';
With Query1 do begin Sql.Clear; Sql.Add(Qtxt); execSQL; end;
 
qtxt:='Select Data,Stoim,t.Name '+
'From Tovari t,Vidacha v,Klienti k '+
'Where t.ID_tov=v.ID_tov and k.ID_kl=v.ID_kl and k.ID_kl='''+FormMain.Edit9.Text+'''';
With Query2 do begin Sql.Clear; Sql.Add(Qtxt); Open; end;
 
qtxt:='Select Data,Summa '+
'From KL_Schet c,Klienti k '+
'Where k.ID_kl=c.ID_kl and k.ID_kl='''+FormMain.Edit9.Text+'''';
With Query3 do begin Sql.Clear; Sql.Add(Qtxt); Open; end;
 
qtxt:='Select Data,Peni,T.Name '+
' From Tovari t,Vozvrat v,Klienti k '+
' Where t.ID_tov=v.ID_tov and k.ID_kl=v.ID_kl and k.ID_kl='''+FormMain.Edit9.Text+'''';
With Query5 do begin Sql.Clear; Sql.Add(Qtxt); Open; end;
 
while not Query2.Eof do
  begin
  Qtxt:= 'Insert into IstKl(Data,Sum,Deistvie)  '+
  'Values ( '''+DateToStr(Query2['Data'])+''','''+IntTostr(Query2['Stoim'])+''','''+s1+Query2['Name']+''')';
  With Query1 do begin Sql.Clear; Sql.Add(Qtxt); execSQL; end;
  Query2.Next;
  end;
 
while not Query3.Eof do
  begin
  Qtxt:= 'Insert into IstKl(Data,Sum,Deistvie)  '+
  'Values ( '''+DateToStr(Query3['Data'])+''','''+IntTostr(Query3['Summa'])+''','''+s2+''')';
  With Query1 do begin Sql.Clear; Sql.Add(Qtxt); execSQL; end;
  Query3.Next;
  end;
 
while not Query5.Eof do
  begin
  Qtxt:= 'Insert into IstKl(Data,Sum,Deistvie) '+
  'Values ( '''+DateToStr(Query5['Data'])+''','''+IntTostr(Query5['Peni'])+''','''+s3+Query5['Name']+''')';
  With Query1 do begin Sql.Clear; Sql.Add(Qtxt); execSQL; end;
  Query5.Next;
  end;
 
qtxt:='Select * From IstKl Order by data desc';
With Query4 do begin Sql.Clear; Sql.Add(Qtxt); Open; end;
 
qtxt:='Drop Table IstKl';
With Query1 do begin Sql.Clear; Sql.Add(Qtxt); ExecSQL; end;
 
end;

Отсюда видно,что выполняется 2 аналогичных операции и никаких ошибок не выдает,а когда добавил код из первого сообщения,появились проблемы.
Ответить с цитированием
  #4  
Старый 14.02.2010, 19:47
Dima Dima вне форума
Прохожий
 
Регистрация: 03.02.2010
Адрес: Нижний Новгород
Сообщения: 12
Репутация: 10
По умолчанию

И еще это "громадье" нужно,чтобы в поле Deistvie записывались данные не толко из базы,а еще и из переменных s1,s2,s3. Я придумал лишь такой способ это осуществить
Ответить с цитированием
  #5  
Старый 14.02.2010, 20:39
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
ID_kl поле int,но это вроде ничего не меняет.
Вообще-то меняет, т.к. вы пытаетесь с ним работать как со строкой обрамляя значение в кавычки:
Цитата:
k.ID_kl='''+FormMain.Edit9.Text+''''
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 15.02.2010, 17:52
Dima Dima вне форума
Прохожий
 
Регистрация: 03.02.2010
Адрес: Нижний Новгород
Сообщения: 12
Репутация: 10
По умолчанию

вроде работает верно и с кавычками и без
Ответить с цитированием
  #7  
Старый 15.02.2010, 19:34
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Цитата:
Сообщение от Dima
вроде работает верно и с кавычками и без
А с какой базой работаете ( для некоторых действительно это без разницы - например PostgerSQL).

Про формы уточните, что хотите.
Если надо показать заставку, а потом ее закрыть и показать главную форму то ( загляните в .dpr - Project-> View Source один из способов:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<font color="#008000"><b>begin</b></font>
 <font color="#000000">Application.Initialize;</font>
 <font color="#000000">Form2 :=  TForm2.Create(Application);// это форма заставка
</font>
 <font color="#000000">Form2.Show;</font>
 <font color="#000000">Form2.Update;</font>
 <font color="#000000">try
  </font><font color="#000000">Application.CreateForm(TForm1,  Form1);// первая созданная так форма будет главной
</font>
// ....
<font color="#000000">finally
  </font><font color="#000000">Form2.Free;</font> 
 
end;
<font color="#000000">Application.Run;</font>
 <font color="#008000"><b>end</b></font><font color="#000000">.</font>
Ответить с цитированием
  #8  
Старый 15.02.2010, 19:47
Dima Dima вне форума
Прохожий
 
Регистрация: 03.02.2010
Адрес: Нижний Новгород
Сообщения: 12
Репутация: 10
По умолчанию

С формами уже разобрался...остается вопрос по БД.Работаю с MS SQL Server 2000
Ответить с цитированием
  #9  
Старый 15.02.2010, 22:37
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Есть два предположения:
- T.Name может регистрозависимо и надо t.Name ?

- Deistvie varchar(20) а s3 уже длиннее 20 символов. Вот и ругается на Query1.Next

а так как у тебя все в одну строчку то попадаешь на следующую.
Напиши каждый оператор в отдельной строке и попробуй пошагово.

И записывать можно по проще:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  Query1.Sql.Text := 'Create table IstKl (Data datetime,Sum numeric,Deistvie varchar(20)) ';
  Query1.execSQL;
 
  Query2.Sql.Text := 'Select Data,Stoim,t.Name ' +
    'From Tovari t,Vidacha v,Klienti k ' +
    'Where t.ID_tov=v.ID_tov and k.ID_kl=v.ID_kl and k.ID_kl=''' + FormMain.Edit9.Text + '''';
  Query2.Open;
 
  Query3.Sql.Text := 'Select Data,Summa ' +
    'From KL_Schet c,Klienti k ' +
    'Where k.ID_kl=c.ID_kl and k.ID_kl=''' + FormMain.Edit9.Text + '''';
  Query3.Open;
 
  Query5.Sql.Text := 'Select Data,Peni,T.Name ' +
    ' From Tovari t,Vozvrat v,Klienti k ' +
    ' Where t.ID_tov=v.ID_tov and k.ID_kl=v.ID_kl and k.ID_kl=''' + FormMain.Edit9.Text + '''';
  Query5.Open;
...........
Ответить с цитированием
  #10  
Старый 16.02.2010, 15:05
Dima Dima вне форума
Прохожий
 
Регистрация: 03.02.2010
Адрес: Нижний Новгород
Сообщения: 12
Репутация: 10
По умолчанию

именно эти 2 ошибки я допустил...спасибо большое,все поправил,работает
Ответить с цитированием
  #11  
Старый 22.02.2010, 19:46
viktor6 viktor6 вне форума
Прохожий
 
Регистрация: 22.02.2010
Сообщения: 1
Репутация: 10
По умолчанию

Ребята помогите сделать правильный запрос в базу данных
вот стандарт
Код:
1
2
b := rs.FormatQuery('INSERT INTO '+DBRec.table1+' (BanCreate, HDDSN, Name, IPAddr, BanTime, Reason, SteamId, UUID) '+
                          'VALUES (%s,%s,%s,%s,%d,%s,%s,%s)', [SqlDT2Str(p^.DateTime), p^.HddSN, p^.Name, p^.IPAddr, p^.min, p^.Reason, p^.SteamId, p^.UUID]);
нужно его привесты к такому виду
Код:
1
2
b := rs.FormatQuery('INSERT INTO '+DBRec.table1+' (player_id,player_ip,player_nick,admin_ip,admin_id,admin_nick,ban_type,ban_reason,ban_created,ban_length,server_name,server_ip, SteamId, UUID) '+
                        'VALUES (%s,%s,%s,'''','''',''MyAC'',''S'',%s,%d,%d,''MyAC Anticheat'','''')', [p^.HddSN, p^.IPAddr, p^.Name, p^.Reason, SqlDT2Str(p^.DateTime), p^.min, p^.SteamId, p^.UUID]);
мне почемуто отвечает такое
Цитата:
"#1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1"
таблица в базе такая стандартная
PHP код:
CREATE TABLE `banlist` (
  `
BanCreatedatetime NOT NULL,
  `
HDDSNvarchar(50NOT NULL,
  `
Namevarchar(34NOT NULL,
  `
IPAddrvarchar(16NOT NULL,
  `
BanTimeint(11NOT NULL,
  `
Reasonvarchar(80NOT NULL,
  `
SteamIdvarchar(20NOT NULL,
  `
UUIDvarchar(32NOT NULL,
  
PRIMARY KEY (`HDDSN`),
  
UNIQUE KEY `HDDSN` (`HDDSN`),
  
KEY `BanCreate` (`BanCreate`),
  
KEY `BanTime` (`BanTime`),
  
KEY `UUID` (`UUID`)
ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE `history` (
  `
BanCreatedatetime NOT NULL,
  `
HDDSNvarchar(50NOT NULL,
  `
Namevarchar(34NOT NULL,
  `
IPAddrvarchar(16NOT NULL,
  `
BanTimeint(11NOT NULL,
  `
Reasonvarchar(80NOT NULL,
  `
SteamIdvarchar(20NOT NULL,
  `
UUIDvarchar(32NOT NULL,
  
KEY `HDDSN` (`HDDSN`),
  
KEY `BanCreate` (`BanCreate`),
  
KEY `BanTime` (`BanTime`),
  
KEY `UUID` (`UUID`)
ENGINE=MyISAM DEFAULT CHARSET=latin1
переделываю на этую базу
PHP код:
CREATE TABLE `amx_bans` (
  `
bidint(11NOT NULL,
  `
player_ipvarchar(100NULL,
  `
player_idvarchar(50NOT NULL,
  `
player_nickvarchar(100NOT NULL,
  `
admin_ipvarchar(100NULL,
  `
admin_idvarchar(50NOT NULL,
  `
admin_nickvarchar(100NOT NULL,
  `
ban_typevarchar(10NOT NULL ,
  `
ban_reasonvarchar(255NOT NULL,
  `
ban_createdint(11NOT NULL,
  `
ban_lengthvarchar(100NOT NULL,
  `
server_ipvarchar(100NOT NULL,
  `
server_namevarchar(100NOT NULL,
  `
SteamIdvarchar(20NOT NULL,
  `
UUIDvarchar(32NOT NULL,
  
PRIMARY KEY  (`bid`),
  
KEY `SteamId` (`SteamId`),
  
KEY `UUID` (`UUID`)
ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `amx_banhistory` (
  `
bhidint(11NOT NULL,
  `
player_ipvarchar(100) default NULL,
  `
player_idvarchar(50NOT NULL,
  `
player_nickvarchar(100NOT NULL,
  `
admin_ipvarchar(100) default NULL,
  `
admin_idvarchar(50NOT NULL,
  `
admin_nickvarchar(100NOT NULL,
  `
ban_typevarchar(10NOT NULL,
  `
ban_reasonvarchar(255NOT NULL,
  `
ban_createdint(11NOT NULL,
  `
ban_lengthvarchar(100NOT NULL,
  `
server_ipvarchar(100NOT NULL,
  `
server_namevarchar(100NOT NULL,
  `
unban_createdint(11NOT NULL,
  `
unban_reasonvarchar(255NOT NULL,
  `
unban_admin_nickvarchar(100NOT NULL,
  `
SteamIdvarchar(20NOT NULL,
  `
UUIDvarchar(32NOT NULL,
  
PRIMARY KEY  (`bhid`),
  
KEY `SteamId` (`SteamId`),
  
KEY `UUID` (`UUID`)
ENGINE=MyISAM DEFAULT CHARSET=latin1
исходники прилагаю
http://depositfiles.com/files/wvsx9y6sg
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025