Autor Thema: SQL-SELECT "spinnt"  (Gelesen 7170 mal)

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
SQL-SELECT "spinnt"
« am: 20.08.14 - 14:10:14 »
Hi zusammen,

ich bin grad dabei einen Agenten zu schreiben, der eine View (View 1) eines MS SQLServers 2012 ausliest. Jeder Datensatz hat eine Spalte UUID mit deren Inhalt ich einen SELECT auf ne andere View (View 2) absetzte:

SELECT * FROM dbo.vw_timelogs WHERE uuid = 'C222AEFA-E63A-45FA-AEF1-0149C6503A06'

Kriege ich lediglich beim *letzten* Datensatz der View 2 einen Treffer - bei den ersten 300 Datensätzen behauotet er, dass er nix findet.
Das gleiche tritt bei einem SELECT auf View 3 auf (mit einem anderen Key).

Wenn ich nun jedoch den Agenten hartcodiert mit den beiden Keys aufrufe, findet er enstprechende Datensätze, obwohl die gleichen Keys beim Aufruf via Schleife über alle Datensätze keinen Treffer gebracht haben.

Ich versteh's net  :-:

Hat jemand nen Tipp für mich?

Danke & Gruß,
Buzzy

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: SQL-SELECT "spinnt"
« Antwort #1 am: 20.08.14 - 14:57:26 »
Evtl ein problem mit den Anführungszeichen beim bereitstellen der query?  oder Gross/klein Schreibung? bzw ein fehlendes Fulltrim ?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: SQL-SELECT "spinnt"
« Antwort #2 am: 20.08.14 - 15:09:41 »
Und 2 Selects? Warum nicht ein JOIN?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: SQL-SELECT "spinnt"
« Antwort #3 am: 20.08.14 - 16:57:45 »
Ich nehme mal an, du verbindest dich mit ODBC. Wenn ja dann drehe doch einfach mal die Ablaufverfolgung im ODBC ein und schaue welche SQL Statements dein Agent an den SQL Server schickt. Dann solltest du das Problem offensichtlich werden.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #4 am: 21.08.14 - 08:39:40 »
Moing zusammenm

also das Problem hat sich jetzt verschoben - ich hab nun eine neue View bekommen, wo alles drin steht (mit einem JOIN, m3 *g*).
Nun hab ich aber das gleiche Problem beim Updaten eines abgeholten Datensatzes - wenn ich daraus erfolgreich ein NotesDok erstellt habe, möchte ich den SQL-Datensatz markieren:

"UPDATE dbo.vw_CasetrackerLookup SET Verarbeitet = '1' WHERE UUID = '} + CStr(uuid) + {'"

wobei ich mir "uuid"  wieder aus der Tabelle hole - nachdem uuid ein "uniqueidenitifer" ist, muss ich beim SELECT den Datentyp casten, damit ich ihn überhaupt in eine LS-Variable stecken kann:

SELECT CAST(uuid as CHAR(255)) as uuid, * FROM dbo.vw_CasetrackerLookup

Muss ich "uuid" zur Verwendung im UPDATE nochmal konvertieren?

@Ralf: wo stelle ich das ein? Ich hab die Datenquelle über "Verwaltung/ODBC-Datenquellen" angelegt - da finde ich keine entsprechende Option.
Ich habe zum Erstellen den Treiber "SQL Server (6.01.*)" genommen...

Danke & Gruß,
Buzzy

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #5 am: 21.08.14 - 08:47:11 »
Evtl ein problem mit den Anführungszeichen beim bereitstellen der query?  oder Gross/klein Schreibung? bzw ein fehlendes Fulltrim ?

Also ich hab mit das SQL mal ausgeloggt, da ist kein Leerzeichen drin, das nicht rein gehört:

UPDATE dbo.vw_CasetrackerLookup SET Verarbeitet = '1' WHERE UUID = 'C222AEFA-E63A-45FA-AEF1-0149C6503A06'

Wenn ich das Statement so im SQLManager absetze, klappt alles:

UPDATE [CoMo].[dbo].[vw_CasetrackerLookup] SET [Verarbeitet] = '1' WHERE [UUID] = 'C222AEFA-E63A-45FA-AEF1-0149C6503A06'

(Die Syntax ist hier anders, aber das dürfte ja dem "Notes"-SQL egal sein...der SELECT klappt ja auch)


Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: SQL-SELECT "spinnt"
« Antwort #6 am: 21.08.14 - 08:50:15 »
Ich verstehe das mit den geschwungenen Klammern in deinem Update nicht. uuid ist doch in Lotusscript ein String oder warum musst du den extra nocheinmal mit CSTR bearbeiten. Übrigens ist dein Code für SQL Injections anfällig und sollte so nicht gemacht werden. Eventuell solltest du jemand beiziehen, der mehr Erfahrung mit SQL hat.

Bezüglich der Ablaufverfolgung. Die kannst du wie in folgenden Screenshot angezeigt einschalten.

Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: SQL-SELECT "spinnt"
« Antwort #7 am: 21.08.14 - 08:51:53 »
Moin

und wenn Du dieses Statement UPDATE [CoMo].[dbo].[vw_CasetrackerLookup] SET [Verarbeitet] = '1' WHERE [UUID] = 'C222AEFA-E63A-45FA-AEF1-0149C6503A06'
vom Notes aus absetzt?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: SQL-SELECT "spinnt"
« Antwort #8 am: 21.08.14 - 08:59:24 »
Poste doch mal den Lotusscript code, den du verwendest um das SQL abzusetzen.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #9 am: 21.08.14 - 09:01:27 »
Ich verstehe das mit den geschwungenen Klammern in deinem Update nicht. uuid ist doch in Lotusscript ein String oder warum musst du den extra nocheinmal mit CSTR bearbeiten. Übrigens ist dein Code für SQL Injections anfällig und sollte so nicht gemacht werden. Eventuell solltest du jemand beiziehen, der mehr Erfahrung mit SQL hat.

Bezüglich der Ablaufverfolgung. Die kannst du wie in folgenden Screenshot angezeigt einschalten.



Ah, danke - die SQL.log wird aber nicht erzeugt bei mir...ich kann auch nicht die Pfade anpassen...

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #10 am: 21.08.14 - 09:06:28 »
Poste doch mal den Lotusscript code, den du verwendest um das SQL abzusetzen.

Grüße

Ralf


Here we go:

Im Initialize wird nur die Connection aufgebaut und dann diese Funktion aufgerufen

Function getAllLogs(whereString As string) As Boolean
   
   set result = New ODBCResultSet
   Set qry = New Odbcquery
   
   '### zum Abfragen der Datensätzte ##############
   Set qry.Connection = con
   Set result.Query = qry
   
   If whereString = "" Then
      qry.SQL = "SELECT CAST(uuid as CHAR(255)) as uuid, * FROM dbo.vw_CasetrackerLookup WHERE Verarbeitet = '0'"
   Else
      qry.SQL = "SELECT * FROM dbo.vw_CasetrackerLookup WHERE " + whereString
   End If
   '################################################
   
   '### zum Updaten eins erfolgreich abgeholten Datensatze ###
   Dim updateQuery As New Odbcquery
   Dim updateResult As New Odbcresultset
   
   Set updateQuery.Connection = con
   Set updateResult.Query = updateQuery
   '############################################
      
   result.Execute
         
   Dim user As String
   Dim category As String
   Dim durationMin As Integer   
   Dim task As String
   Dim caseUNID As String      
   Dim ticketUNID As String
   Dim billable As string
   Dim uuid As String
   
   Dim newTimeLog As NotesDocument
   
   If result.IsResultSetAvailable Then      
      Do
         result.NextRow
      
         user = getNotesName(result.GetValue("Username"))   
         
         If user = "" Then
            Call LogEvent("Kein NAB-Dok gefunden zu '" + result.GetValue("Username") + "'",SEVERITY_HIGH,Nothing)   
         End If
               
         category = result.GetValue("Zeitart")         
         durationMin = result.GetValue("Dauer")         
         task = result.GetValue("Aufgabe")      
         caseUNID = result.GetValue("Case")
         ticketUNID = result.GetValue("Ticket")
                  
         uuid = result.GetValue("uuid")
                              
         Call LogEvent(uuid + ": " + user + " / " + category + " / " + CStr(durationMin) + " / " + task,SEVERITY_LOW,Nothing)         
                  
         'Set newTimeLog = New NotesDocument(thisdb)
         'newTimeLog.form = "entry"
               
         'nach dem erfolgreichen Abholen eines Datensatzes wird er in SQL auf "Verarbeitet" gesetzt
         updateQuery.SQL = {UPDATE dbo.vw_CasetrackerLookup SET Verarbeitet = '1' WHERE UUID = '} + CStr(uuid) + {'}
         'updateQuery.SQL = {UPDATE dbo.vw_CasetrackerLookup SET Verarbeitet = '1' WHERE Ticket = '1921'}
         
         Call LogEvent(updateQuery.SQL,SEVERITY_LOW,Nothing)
         
         updateResult.Execute            
         
         GoTo exitLoop
         
      Loop Until result.IsEndOfData
      
exitloop:
      result.Close(DB_CLOSE)
   End If
End Function


Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #11 am: 21.08.14 - 09:07:07 »
Eventuell solltest du jemand beiziehen, der mehr Erfahrung mit SQL hat.

Den Eindruck hab ich auch ;-)

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #12 am: 21.08.14 - 09:07:30 »
gelöscht...
« Letzte Änderung: 21.08.14 - 09:27:41 von buzzy666 »

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #13 am: 21.08.14 - 09:27:01 »
Moin

und wenn Du dieses Statement UPDATE [CoMo].[dbo].[vw_CasetrackerLookup] SET [Verarbeitet] = '1' WHERE [UUID] = 'C222AEFA-E63A-45FA-AEF1-0149C6503A06'
vom Notes aus absetzt?

Probier ich mal...

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: SQL-SELECT "spinnt"
« Antwort #14 am: 21.08.14 - 09:46:08 »
Eigentlich solltest du kein Update verwenden, sondern du kannst einfach das Resultset updaten. Das sollte viel einfacher sein.

Also ungefähr so nach dem Select:

call result.setValue("Verarbeitet","1")
result.UpdateRow

Siehe Designer Hilfe http://intranet.ntc.edu/help4.nsf/968106ad371128cb8525619e007ae2ac/7c7bbd9c1b39230d852564d2001a30df?OpenDocument
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #15 am: 21.08.14 - 10:07:07 »
Eigentlich solltest du kein Update verwenden, sondern du kannst einfach das Resultset updaten. Das sollte viel einfacher sein.

Also ungefähr so nach dem Select:

call result.setValue("Verarbeitet","1")
result.UpdateRow

Siehe Designer Hilfe http://intranet.ntc.edu/help4.nsf/968106ad371128cb8525619e007ae2ac/7c7bbd9c1b39230d852564d2001a30df?OpenDocument

Klappt auch nicht - ich hab auch mal geschaut, ob die View "ReadOnly" ist - isse nicht. Kann ich Views überhautp updaten, oder geht das nur auf Tabellen?


Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: SQL-SELECT "spinnt"
« Antwort #16 am: 21.08.14 - 10:08:52 »
Mach doch ein Select auf die Tabelle und update dann wie beschrieben.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: SQL-SELECT "spinnt"
« Antwort #17 am: 21.08.14 - 10:36:42 »
Mach doch ein Select auf die Tabelle und update dann wie beschrieben.

Grüße

Ralf


Mach ich doch - ich schleife über das ResultSet des Selects, lese meine Felder aus, verwurste die und sage am Ende der Schleife

Call result.setValue("Verarbeitet","1")
updateStatus = result.UpdateRow

wie Du vorgeschlagen hast.

result.UpdateRow gibt FALSE zurück
die Connection selber steht auf "Autocommit = TRUE"
und das ResultSet ist nicht ReadOnly


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz