Autor Beitrag
NOS1971
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Di 08.04.14 15:24 
Hi ... wie aus dem nichts bekomme ich beim auslesen des ersten boolschen wertes aus das db folgende meldung: Cannot access field 'DETECTPAGERANK' as type boolean beim auslesen

anbei mal der code des auslesens ... ich habe nicht die geringste ahnung warum das passiert ... sind boolsche werte ein problem ?

ausblenden volle Höhe Delphi-Quelltext
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:
  SettingsItem := TSQLDataSet.Create(nil);
  SettingsItem.SQLConnection := MultiThreadedWebAnalyser.AnalyserResultDataBaseConnecton;
  SettingsItem.CommandText := 'SELECT * FROM AnalyseSettingsTable;';
  SettingsItem.Open;
  if not SettingsItem.IsEmpty then
  begin
   // item found
   SettingsItem.First;
   // now load data into mtws core
   AnalyseURL := TField(SettingsItem.FieldByName('ANALYSEURL')).AsString;
   AnalyserMode := TField(SettingsItem.FieldByName('ANALYSERMODE')).AsInteger;
   DetectGooglePR := TField(SettingsItem.FieldByName('DETECTPAGERANK')).AsBoolean;
   StripOffURLParameters := TField(SettingsItem.FieldByName('STRIPOFFURLPARAMS')).AsBoolean;
   DetectFeedLinks := TField(SettingsItem.FieldByName('DETECTFEEDURLS')).AsBoolean;
   DetectImages := TField(SettingsItem.FieldByName('DETECTIMAGESANDFILES')).AsBoolean;
   DetectCSSFiles := TField(SettingsItem.FieldByName('DETECTIMAGESINFILESCSS')).AsBoolean;
   DetectXMLFiles := TField(SettingsItem.FieldByName('DETECTIMAGESANDFILESXML')).AsBoolean;
   DetectHTags := TField(SettingsItem.FieldByName('DETECTH1TOH6TAGS')).AsBoolean;
   MaxAnalysisItems := TField(SettingsItem.FieldByName('MAXURLSTOANALYSE')).AsInteger;
   UseProxyServer := TField(SettingsItem.FieldByName('USEPROXYSERVER')).AsBoolean;
   ProxyServer := TField(SettingsItem.FieldByName('PROXYSERVER')).AsString;
   ProxyUsername := TField(SettingsItem.FieldByName('PROXYUSERNAME')).AsString;
   ProxyPassword := TField(SettingsItem.FieldByName('PROXYPASSWORD')).AsString;
   ProxyServerPort := TField(SettingsItem.FieldByName('PROXYSERVERPORT')).AsInteger;
   MaxThreadCount := TField(SettingsItem.FieldByName('MAXTHREADCOUNT')).AsInteger;
   DeepSiteAnalysis := TField(SettingsItem.FieldByName('DEEPSITEANALYSIS')).AsBoolean;
   ThreadPriority := TThreadPriority(TField(SettingsItem.FieldByName('THREADPRIORITY')).AsInteger);
   CreationDelay := TField(SettingsItem.FieldByName('CREATIONDELAY')).AsInteger;
   ReadTimeOut := TField(SettingsItem.FieldByName('HTTPCONNECTIONREADTIMEOUT')).AsInteger;
   ConnectionTimeOut := TField(SettingsItem.FieldByName('HTTPCONNECTIONTIMEOUT')).AsInteger;
   MaxHTTPRedirect := TField(SettingsItem.FieldByName('HTTPCONNECTIONREDIRECTIONS')).AsInteger;
   MaxRetryCount := TField(SettingsItem.FieldByName('HTTPCONNECTIONSRETRIES')).AsInteger;
   MaxSleepTime := TField(SettingsItem.FieldByName('HTTPCONNECTIONRETRYMAXSLEEPTIME')).AsInteger;
   SleepTimeIncrementor := TField(SettingsItem.FieldByName('HTTPCONNECTIONRETRYMAXSLEEPTIMEINCREMENTOR')).AsInteger;
   MaxAuthRetries := TField(SettingsItem.FieldByName('HTTPAUTHENTIFICATIONRETRIES')).AsInteger;
   ProgressData.AddedCount := TField(SettingsItem.FieldByName('ADDEDCOUNT')).AsInteger;
   ProgressData.AnalysedCount := TField(SettingsItem.FieldByName('ANALYSEDCOUNT')).AsInteger;
   ProgressData.ProcessedCount := TField(SettingsItem.FieldByName('PROCESSEDCOUNT')).AsInteger;
   GlobalHCount := TField(SettingsItem.FieldByName('GLOBALHCOUNT')).AsInteger;
   GlobalH1Count := TField(SettingsItem.FieldByName('GLOBALH1COUNT')).AsInteger;
   GlobalH2Count := TField(SettingsItem.FieldByName('GLOBALH2COUNT')).AsInteger;
   GlobalH3Count := TField(SettingsItem.FieldByName('GLOBALH3COUNT')).AsInteger;
   GlobalH4Count := TField(SettingsItem.FieldByName('GLOBALH4COUNT')).AsInteger;
   GlobalH5Count := TField(SettingsItem.FieldByName('GLOBALH5COUNT')).AsInteger;
   GlobalH6Count := TField(SettingsItem.FieldByName('GLOBALH6COUNT')).AsInteger;
   GlobalInternalLinks := TField(SettingsItem.FieldByName('GLOBALINTERNALLINKS')).AsInteger;
   GlobalExternalLinks := TField(SettingsItem.FieldByName('GLOBALEXTERNALLINKS')).AsInteger;
   GlobalImageLinks := TField(SettingsItem.FieldByName('GLOBALIMAGELINKS')).AsInteger;
  end;
  SettingsItem.Close;
  Settingsitem.SQLConnection := nil;
  SettingsItem.Free;
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 08.04.14 15:44 
user profile iconNOS1971 hat folgendes geschrieben Zum zitierten Posting springen:
sind boolsche werte ein problem ?

Tendenziell: ja. Es hängt sehr davon ab, wie du deinen Boolean in die Datenbank schreibst...und auch, wie er abgespeichert wird und du ihn am Ende dann wieder erhälst. Viele Datenbanken kennen an sich garkeinen Boolean-Datentyp.
www.sqlite.org/datatype3.html hat folgendes geschrieben:
SQLite does not have a separate Boolean storage class. Instead, Boolean values are stored as integers 0 (false) and 1 (true).


Wenn es Probleme gibt, deklariere das Feld gleich selbst als Integer. Definiere selbst Konstanten für true und false auf Basis dieser Integer. Beim Lesen kannst du dann leicht von Hand testen. Beispiel als Pseudocode:

ausblenden Delphi-Quelltext
1:
2:
3:
const DB_FALSE=0; DB_TRUE=1;
db.SetFieldByName('myBoolField').AsInteger := DB_TRUE;
result := not( db.GetFieldByName('myBoolField').AsInteger = DB_FALSE);


Es mag auch direkt mit boolschen Datentypen gehen, aber ich bevorzuge den Umweg über Integer da er
- gleichen Speicherbedarf hat,
- leicht zu verstehen ist,
- auf Nummer sicher geht.
Nachteilig kann sein, dass man dann auch in SQL-Abfragen, welche diese boolschen Felder benutzen, diesen Umweg gehen muss (aus Sicht der Abstraktion unschön).

Solltest du damit nicht zufrieden sein, dann zeige mal den Code dazu, wie du die Bools in die Datenbank schreibst.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)

Für diesen Beitrag haben gedankt: NOS1971
NOS1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 193

Windows 8.1 PRO 64 Bit
Delphi XE7 Professional
BeitragVerfasst: Di 08.04.14 15:57 
Ich denke ich werde dann auch den etwas umständlicheren Weg gehen und die boolschen Werte in Integer umwandeln ...

Vielen Dank für die Erklärung und einen schönen Tag.

Grüße,
Andreas