Jump to content
  • 0

Hoe telt fmserver het aantal ODBC connecties..


relatieboot

Question

Posted

Geachte Leden (der ...),

 

Met de komst van multithreaded fmsserver 13 lopen we tegen licentie problemen aan omdat we over de 5 simultane ODBC connecties heen gaan terwijl er in mijn ogen 1 ODBC-connectie wordt gelegd. Het query bestaat uit een hoofdquery en subqueries per up te loaden record. Er is een hoofdscript dat in variabelen de queries creëert en er zijn subscripts die de queries uitvoeren. Een subquery-script is een simpel kort scriptje dat de scriptparameter hanteert als query-tekst en deze wordt gedraaid als 'Perform Script on server [Wait for completion]' van uit het hoofdscript om te zorgen dat niet elke client een eigen ODBC-connetor nodig heeft. De code vind je hieronder, wat het script nog meer doet is de data in een log-record vastleggen en evt errors als script-result terugsturen.

 

Het duurt misschien lang maar ik veronderstel dat dit script op deze manier slechts 1 ODBC-connetie nodig heeft. Verder moet het hoofdrecord eerst bestaan voordat de subrecords worden aangemaakt anders krijgen we relationele problemen in de SQL-server db.

 

Ik maak gebruik van Actualtech ODBC-drivers; ze hebben ook deze vraag gekregen maar meer gesteld vanuit 'hoeveel licenties zijn er nodig dan?'

 

 

Set Error Capture [ On ]

Go to Layout [ “ImportLogs” (IMPORT_logs) ]

New Record/Request

Set Variable [ $query; Value:Get (ScriptParameter) ]

Set Field [ IMPORT_logs::Log output; Get (ScriptName) & "-started.¶" & $query ]

Execute SQL [ ODBC Data Source: “shared_db.life”; Calculated SQL Text: $query ] [ No dialog ]

Set Variable [ $error; Value:Case (Get ( LastError ) ≠ 0 and not IsEmpty (Get ( LastError ) ) ; "lasterror: " & Get ( LastError ) ; "" ) & Case (Get ( LastODBCError ) ≠ 0 and not IsEmpty (Get ( LastODBCError ) ) ; "¶odbc error: " & Get ( LastODBCError ) ; "" ) ]

New Record/Request

Set Field [ IMPORT_logs::Log output; Get (ScriptName) & "-finished.¶" & "lasterror: " & Get ( LastError ) &

"¶odbc errors: " & Get ( LastODBCError ) ] Go to Layout [ original layout ]

Set Error Capture [ Off ]

Exit Script [ Result: $error ]

3 answers to this question

Recommended Posts

  • 0
Posted

Leg je vanaf je FmServer met de FmServer een verbinding via ODBC? Waarom doe je dat terwijl je gewoon contact hebt met de FmServer? Of probeer je vanaf de FmServer via een ODBC-verbinding te connecten met bijv. een MySQL-, Oracle- of een MSSSQL-server? M.a.w. waar connect je eigenlijk mee?

Je query heb je hier namelijk niet getoond en aan de DSN (wat jij noemt de ODBC Data Source) is niet te zien/ af te leiden waarmee je eigenlijk contact maakt.

  • 0
Posted

Sorry Menno, dit was wat onvolledig inderdaad.

 

De filemakerfile kent 2 external data sources en alle hosts die dit file openen zien de external data sources omdat de FMserver via de ODBC-driver een connectie maakt met een MS SQL-server. Werken met de virtual tabels die de tabbellen in de SQL-server moeten voorstellen worden dus gehost via de fm-server naar de fm-clients.

Het gaat mij puur om hoe de fmserver connecties telt voor de ODBC-koppeling(en), en een connectie meetelt als er fm-client in die virtuele tabellen kijkt via de fmserver... Hieronder een mooi asci-schema..

 

FM-client13 <-[fmnet]-> FM13SERVER <-[ODBC]-> SQL-SERVER2008.

 

Er zijn max 15 fm-clients en er bestaan 2 SQL-servers, aka 2 ODBC-DNS-en.

 

Nog even los van het feit dat een fmclient een eigen dedicated connectie kan opbouwen naar de ODBC-dns, want ik begrijp wel dat dat gewoon als een losse connectie telt (voor een ODBC-driver op die fm-client)

 

Hopelijk maakt dit iets meer duidelijk :-)

 

Arjen

  • 0
Posted

M.a.w. je connect dus NIET met FMServer over ODBC, maar je gebruikt ofwel ESS om met MSSQL te verbinden en je hebt MSSQL-tabellen opgenomen in je schema, danwel: je hebt DSN's tot je beschikking die je gebruikt om ODBC-imports te doen van MSSQL-tabellen mbv ExecuteSQL. Of een combinatie van die 2? Is dat correct?

 

In dat geval telt FMServer helemaal geen ODBC-connecties en is dat niet je probleem. Ik denk eigenlijk dat er fouten zitten in de queries die je afvuurt of dat de gebruiker waaronder fm-server draait mogelijk geen toestemming heeft om DSN's te gebruiken.

 

De ODBC-connecties die FM-server telt zijn namelijk alleen maar van toepassing op ODBC-clients die Fm-Server proberen te benaderen .... fm-server is dan de SQL-bron en niet de client zoals in jullie configuratie.

 

Ik weet niet hoe de ODBC-configuratie op een mac eruitziet, maar op windows kan je op 3 manieren DSN's aanmaken: User-DSN, System-DSN en Bestands-DSN. Wil je een DSN gebruiken in Databases die worden geshared door Fm-Server, dan kan je het beste altijd System-DSN's aanmaken, die kan je namelijk kiezen in de connect-to-external-data-source-dialoog van ieder gesharede bestand van Fm-Server. Daarna kan je tabellen via die ene DSN opnemen in je schema (schaduwtabellen) als de target-DB een MySQL-, MSSQL- of Oracle-DB is en anders kan je een SQL-query versturen via die DSN waarmee je tabel asl antwoord krijg voor een import. Dat laatste kan je doen voor de 3 genoemde typen, maar daarnaast kan het ook voor Sybase, Postgress, Progress etc. etc. als je er maar ODBC-drivers voor hebt.

 

Om het lange verhaal kort te maken: voor het benaderen van een MSSQL-server via ODBC met filemaker(-server) spreek je geen Filemaker-ODBC-connecties aan, die worden namelijk niet gebruikt.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...