Как да създадете таблица правилно
AdoQuery1.SQL.Text := "drop table table1"; опитайте AdoQuery1.ExecSQL; освен; end; AdoQuery1.SQL.Text := "create table table1 ( "id int NOT NULL identity(1,1) PRIMARY KEY, name varchar(50) NULL . )"; AdoQuery1.ExecSQL; При втория execsql хвърля общо изключение "вече има обект със същото име в базата данни". Как да го направя правилно?
говори се, че вече има такъв обект
Как да го направя правилно?
Точно така - не е да се пишат такива конструкции
ако не съществува (изберете 1 от sysobjects where ) започнете създайте таблица Table1 ( id int NOT NULL identity(1,1), . ограничение PK_Table1 първичен ключ (id) ); край;
Значи внедряването на SQL в Delphi7 е, меко казано, непълно?
Внедряването на SQL в Delphi7 е меко казано непълно?
Но всеки прави ТОВА.
Това не означава, че реализацията на езика SQL е в Delphi.
При втория execsql хвърля общо изключение „вече има обект със същото име в базата данни“. Как да го направя правилно?
не извиквайте create table, ако таблицата, която се създава, вече съществува в базата данни.
Просто масата "е още жива". Трябва по някакъв начин да потвърдим падането
ако съществува (изберете * от dbo.sysobjects където ) = 1) drop table [dbo].[Contract] GO това прави isqlw.exe last go разделя пакета за mssql следните команди ще бъдат в друг пакет и вече няма да има таблица за тях
за начало ще бъде полезно просто да премахнете обработката на трея / изключение при такова глупаво изпълнение.
> премахнете обработката на tri/except в такова глупаво изпълнениеЕ, какво общо има опитът с това? Изглежда, че правите таблици в мениджърско студио.> просто масата е "още жива".Точно така! Но "Go" ExecSQL не приема никаква форма. Невалидна съхранена процедура, невалиднасинтаксис ако след ако съществува.
> [7] океан (29.12.09 12:47) > Но всеки прави ТОВА.
Вероятно съм напълно погрешен. Никога не съм създавал таблици от моите програми.
защото няма такава команда като go :)
> Това е вярно! Но "Go" ExecSQL не го приема под никаква форма. > Невалидна съхранена процедура, невалиден синтаксис, ако след > ако съществува.
командата GO е разделителят на транзакциите в MSSQL.
> Е, какво се опитва тук? Изглежда, че правите таблици в мениджърско студио. Друга дълбока мисъл.
try няма нищо общо с това и ето изключението, "отрязано" от него, което може да ви обясни защо командата delete не работи.
> Вероятно съм напълно погрешен. Никога не създавани таблици > от техните програми.
Е, purkua не би pa? Просто трябва да го използвате внимателно, това е всичко.
> и тук изключениетоопитайте "cut off" от него не прекъсва "изключението" по време на проектиране. Още веднъж казвам, отпадането не създава грешки. Тази мисъл е разумна,> ако не съществува (изберете 1 от sysobjects where )Само за ваше добро пиша: AdoQuery1.SQL.Text := "if object_id(""table1"",""U"") IS NOT NULL drop table table1"; AdoQuery1.ExecSQL; AdoQuery1.SQL.Text := "create table . Резултатът не се променя. Момчета, вие сте много замислени enna, но въпросът е прост?
о, добре, на :) ADOQuery1.SQL.Text:="drop table table1" ADOQuery1.Connection.BeginTrans; ADOQuery1.ExecSQL; ADOQuery1.Connection.CommitTrans;
Имате ли въпрос относно Delphi?
> try не изрязва "освен" по време на проектиране. какво е дизайн? кога му е времето?
> но въпросът е прост? само изпълнението е лошо, но какво не се показва, т.е. първоначалните данни не са всички.
IMHO,компонентът е или настроен на асинхронен режим, или, по-вероятно, компонентът за връзка не се използва.
Изглежда, че правите таблици в управлението > студио.Какъв е рискът?
Е, какво общо има опита?
Махни го и ще видиш.
Ще го кажа отново, drop не хвърля никакви грешки.
искаш да кажеш, че си по-умен от сървъра skl или какво?
между другото, ако падането не доведе до грешки, особено премахнете опитайте тогава може да дойде.
> Само за вас пиша: > AdoQuery1.SQL.Text := "ако object_id(""table1"",""U"") IS > NOT NULL drop table table1"; > AdoQuery1.ExecSQL; > AdoQuery1.SQL.Text := "създай таблица. > Резултатът не се променя. Момчета, много сте замислени, > но въпросът е прост?
За тези в резервоара:
използва Windows, Съобщения, SysUtils, Варианти, Класове, Графики, Контроли, Формуляри, Диалогови прозорци, StdCtrl, DB, ADODB;
тип TForm2 = клас(TForm) ADOConnection1: TADOConnection; ADOCommand1: TADOCommand; ADODataSet1: TADODataSet; Бутон1: TButton; Бутон2: TButton; Етикет1: TLabel; процедура FormCreate(Подател: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); частен < Лични декларации > публичен < Публични декларации > край;
var Form2: TForm2;
procedure TForm2.Button1Click(Sender: TObject); var ss : string; begin ss := "Изберете x=count(*) от test_table"; опитайте ADODataSet1.CommandText := ss; ADODataSet1.Open; Label1.Caption := ADODataSet1.FieldByName("X").AsString; накрая ADODataSet1.Close; край; край;
procedure TForm2.Button2Click(Sender: TObject); var ss : string; begin ss := "ако несъществува (изберете 1 от sysobjects, където + "begin create table test_table (id int NOT NULL identity(1,1)) end"; ADOCommand1.CommandText := ss; ADOCommand1.Execute; end;
procedure TForm2.FormCreate(Sender: TObject); begin ADOConnection1.Connected := True; end;
> Горният код може да работи
Даденияткод ще работи, без никакво "може би". Ако не беше работил, нямаше да публикувам тук.
океан (29.12.09 16:46) [26] Нещо не разбирам, какво ти трябва, какво не отговаря на Alter table?
Но все пак те съветвам да си наемеш програмист.