ODBC MS SQL Datenbank erstellen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

Ich habe hier mal den Quelltext des Testprojektes, so wie ich mir das dachte bzw so wie es noch nicht funktioniert.
Auf dem Formular sind dann eben nur ein Button, die Connection-, Transactionkomponenten und ein Query.
Quelltext.png

Und wenn das OnClickereignis aktiviert wird, so kommt diese Fehlermeldung:
Fehlermeldung.png
Fehlermeldung.png (7.51 KiB) 1621 mal betrachtet

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

Da hatte sich jetzt meine Antwort mit deiner Gegenantwort überschnitten. Gerade warst du noch bei ODBC jetzt wieder direkt.

VarStr hat geschrieben:Meinst du, dass ich über den befehl CreateDB eine Datenbank erstellen soll?


Ich weiß doch nicht ob du eine DB erstellen willst, und ich frage mich die ganze Zeit schon, warum überhaupt?
Wenn die DMLs gehen, dann gibt es doch die DB bereits?

Und .. mach diich erst mal schlau über SQL-Datenbanken, Transaktionen und ODBC, sorry, aber was du jetzt machst ist basteln, und nicht programmieren.
Eine echte Datenbankanwendung kann man nicht zusammenklicken.

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

hde hat geschrieben:Ich weiß doch nicht ob du eine DB erstellen willst, und ich frage mich die ganze Zeit schon, warum überhaupt?
Wenn die DMLs gehen, dann gibt es doch die DB bereits?

Also erst einmal ja. Ich möchte eine Datenbank erstellen. Zum warum sei zu sagen, dass das so ne Art Abschlussarbeit ist. Für die Schule. Meine Aufgabe (hat mir mein lehrer rausgesucht) ist so ein kleines Datenbankmanagementtool zu basteln. Im Unterricht haben wir nur mit ODBC gearbeitet, wesshalb ich darauf zurückgegriffen habe. Bislang lief das auch ganz gut. Ich bin ja großteilig fertig (und alle dem Lehrer gezeigten Prototypen wurden von ihm abgesegnet). Nur diese eine Sache will halt nicht hinhauen. Meinen Lehrer konnte ich vor den Ferien (die fingen diese Woche an) nur kurz dazu befragen und er meinte, dass ich diese befehle über die master-datenbank ausführen kann.
Das reicht aber leider anscheinend nicht. Tja und ich werde den guten mann leider nicht vor dem ende der ferien wieder sehen und abgabe ist .... ja genau. nach den ferien.
die anderen befehle habe ich an bereits existierenden datenbanken ansprobiert. sie funktionieren. mein tool kann nur noch nicht selber eine datenbank erstellen. geht nicht.
Damit kommen wir auch zum Thema informiert. Ich war informiert. Bis zu diesem einen Punkt hat ja alles funktioniert. Ich war nur nicht informiert, dass es da mit dem CREATE bzw DROP Befehl Probleme geben würde. Dazu habe ich mich versucht zu informieren.
Das geht hier aber beispielsweise nicht, weil ihr wohl etwas zu viel wissen erwartet. Weiterhin versteht ihr anscheinend mein problem nicht bzw seid durch meine dürftigen schilderungsversuche eher verwirrt.
Und meine Versuche selber zu recherchieren sind auch gescheitert. Ja ein Ansatz wäre da, aber der funktioniert nicht, weil ich nicht einmal in der lage bin, so ne .dll-Datei ins Projekt einzubinden.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

OK, dann versteh ich dich etwas mehr. Aber ich / wir in meiner Firma arbeiten alle nicht mit den SQL-Tools von Lazarus, da müssen dir hier andere im Forum helfen. Und da gibt es bestimmt einige, auch wenn Ostern nicht alle online sind.

Aber grundsätzlich, du musst zunächst den Datenbankserver konnekten. Bei ODBC konfigurierst du in der ODBC-Verwaltung die DSN, und damit auch wohin wirklich deine Reise geht. Wenn du da bereits in einer Datenbank landest, kannst du natürlich keine weitere dort anlegen.

Bei der MSSQLConnection versuch mal zu connecten (ohne DB) und erst dann die DB zu erstellen.

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: ODBC MS SQL Datenbank erstellen

Beitrag von hde »

NS.: auch ich geh jetzt off und bin erst nachts wieder on.

Viel Spaß hde

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: ODBC MS SQL Datenbank erstellen

Beitrag von Antrepolit »

Ich weiß nicht, wo genau das Problem liegt. Ich habe es mit MySQL versucht, das sollte bei ODBC aber keinen Unterschied machen. Mein Projekt-Quelltext:

Code: Alles auswählen

 
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, oracleconnection, sqldb, odbcconn, FileUtil, Forms,
  Controls, Graphics, Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    ODBCConnection1: TODBCConnection;
    SQLTransaction1: TSQLTransaction;
    procedure Button1Click(Sender: TObject);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  ODBCConnection1.Open;
  ODBCConnection1.ExecuteDirect('CREATE DATABASE robot_data');
  ODBCConnection1.Close;
end;
 
end.

Und das funktioniert tadellos. Nur ein zweites Ausführen geht nicht, da die DB dann ja schon existiert. An der TSQLTransaction habe ich nichts geändert, also Default-Einstellung. Die ODBC-Datenquelle in WIndows habe ich ohne Standard-Datenbank angelegt, war auch kein Problem.

Edit1:
Habe das mal mit deinem Code getestet und bekomme den selben Fehler. Aber mit einer TSQLQuery kann ich CREATE DATABASE problemlos absetzen. Das Problem liegt hier in der Lazarus-Komponente TSQLConnection, von der TODBCConnection abgeleitet ist. In der Methode CreateDB wird einfach nur einen Fehler geworfen - warum auch immer. Diese Methode wird also vermutlich bei keiner Connection funktionieren.
Grüße, Antrepolit

care only if your os is really burning

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: ODBC MS SQL Datenbank erstellen

Beitrag von gocher »

Kurz und schmerzlos, verunsichert den armen Jungen doch nicht so, ich habe gerade keinen MSSQL Server zur Hand, aber eigentlich sollte es so laufen. Ich finde wenn ihr auf andere Komponenten verweist solltet ihr auch dazu in der Lage sein einfach mal so ein paar Zeilen zusammen zu klatschen damit jemand versteht wozu die Komponente gut ist.
Wenn alles in der Programmierung ohne diese Komponente realisiert wurde finde ich es sinnlos sie einzubinden wenn lediglich 6 Zeilen Code erforderlich sind. Hier etwas mehr da ich nicht weiß mit welcher MSSQL Version gearbeitet wird.
Also so sollte es mit ADODB gehen:

Code: Alles auswählen

program OleDBMSSQL;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses ComObj, Variants;
{$Define mssqlexpress} //mssql oder mssqlexpress
var cn: OleVariant;
begin
//  CoInitialize(NIL);
// create connection object
  cn := CreateOleObject('ADODB.Connection');
// connect to master database, be sure for username and password
{$ifdef mssql} // MSSQL
  cn.Open('Provider=SQLOLEDB.1;Initial Catalog=Master;Data Source=localhost;Persist Security Info=False;User ID=sa;Password=sa;');
{$endif}
{$ifdef mssqlexpress} // MSSQL Express 2008
  cn.Open('Provider=SQLNCLI10.1;Initial Catalog=Master;Data Source=localhost\SQLEXPRESS;Persist Security Info=False;User ID=sa;Password=sa;');
{$endif}
// create the new database
  cn.Execute('CREATE DATABASE MyTestDB');
//close connection;
  cn.Close;
// destroy connection object
  cn := unassigned;
//  CoUnInitialize;
end.


So sollte es dann mit der TODBCConnection funktionieren

Code: Alles auswählen

program ODBCMSSQL;
{$APPTYPE CONSOLE}
{$mode objfpc}{$H+}
uses sqldb, odbcconn;
var cn: TODBCConnection;
begin
// create connection object
  cn := TODBCConnection.Create(nil);
  cn.DatabaseName := 'master';
  cn.Driver := ''; //<- und andere Parameter wie in Deinen anderen SQL-DB Connects
// connect to master database, be sure for username and password
  cn.UserName := 'sa';
  cn.Password := 'sa';
// create the new database
  cn.ExecuteDirect('CREATE DATABASE MyTestDB');
//close connection;
  cn.Close();
// destroy connection object
  cn.Free;
end.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

VarStr
Beiträge: 10
Registriert: Fr 3. Apr 2015, 01:10

Re: ODBC MS SQL Datenbank erstellen

Beitrag von VarStr »

gocher hat geschrieben:Kurz und schmerzlos, verunsichert den armen Jungen doch nicht so

Ja das haben se ganz gut geschafft, aber das lag wohl an nem kleinen Verständnisproblem.

hde hat geschrieben:Aber grundsätzlich, du musst zunächst den Datenbankserver konnekten. Bei ODBC konfigurierst du in der ODBC-Verwaltung die DSN, und damit auch wohin wirklich deine Reise geht. Wenn du da bereits in einer Datenbank landest, kannst du natürlich keine weitere dort anlegen.

Antrepolit hat geschrieben:Die ODBC-Datenquelle in WIndows habe ich ohne Standard-Datenbank angelegt, war auch kein Problem.

Edit1:
Habe das mal mit deinem Code getestet und bekomme den selben Fehler. Aber mit einer TSQLQuery kann ich CREATE DATABASE problemlos absetzen. Das Problem liegt hier in der Lazarus-Komponente TSQLConnection, von der TODBCConnection abgeleitet ist. In der Methode CreateDB wird einfach nur einen Fehler geworfen - warum auch immer. Diese Methode wird also vermutlich bei keiner Connection funktionieren.

Damit habt ihr mich auf die richtige Spur gebracht. Ich habe versucht ne ODBC-Datenquelle ohne Standard-Datenbank zu erstellen. Das wollte der nicht, aber dann habe ich den Treiber gewechselt. Ich habe bisher immer nur den einen genommen, den wir im Unterricht verwendet haben. Tja und jetzt läufts :)
Vielen lieben Dank an euch. Darauf wäre ich so ja mal garnicht drauf gekommen. Ich habe die Datenquelle ja schon vorher geändert, dass man als Standard-Datenbank auf die master-Datenbank zugreifft. Das war ja mein Ansatz. Das man das über die master-Datenbank macht. Deswegen hätte ich das garantiert nicht gefunden.

Antworten