Как да създадете таблица правилно

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?

Но все пак те съветвам да си наемеш програмист.